0

GrailsのQuartzJobを期待どおりに同時に実行するのに問題があります。これが私の仕事の様子です。Executorプラグインを使用する行をコメントアウトしましたが、コメントアウトしないと、コードは期待どおりに機能します。

import java.util.concurrent.Callable

import org.codehaus.groovy.grails.commons.ConfigurationHolder

class PollerJob {

    def concurrent = true
    def myService1
    def myService2
    //def executorService

    static triggers = {
        cron name: 'pollerTrigger', startDelay:0, cronExpression: ConfigurationHolder.config.poller.cronExpression
    }

    def execute() {
        def config = ConfigurationHolder.config
        //Session session = null;
        if (config.runPoller == true) {
            //def result = executorService.submit({
                myService1.doStuff()
                myService2.doOtherStuff()
            //} as Callable)
        }
    }

}

私の場合、myService2.doOtherStuff()の完了には非常に長い時間がかかり、次にこのジョブがトリガーされるときに重複します。それらが重複してもかまいません。そのため、明示的にdefcurrent = trueを追加しましたが、機能していません。

Quartzプラグインのバージョン0.4.2とGrails1.3.7があります。私はここで何か間違ったことをしていますか?使用するのはかなり簡単な機能のようです。私はExecutorプラグインの使用に反対していませんが、そうする必要はないようです。

重要かどうかはわかりませんが、この場合configからロードしているcronExpressionは、このジョブを毎分実行することを目的としています: "0 * * * *?"

4

1 に答える 1

1

どうやら、これが機能しないようにしていることに気づかなかった隠された構成がありました。私のconfフォルダーには、次のプロパティを含むquartz.propertiesというファイルがありました。

org.quartz.threadPool.threadCount = 1

この数を増やした後、前回の実行が終了していなくても、私のジョブはトリガーされていました。

于 2012-10-17T16:17:47.743 に答える