0

我无法让 Grails 中的 Quartz Job 按预期同时运行。这是我的工作的样子。我已经注释掉了使用 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() 需要很长时间才能完成,这与下次触发该作业时重叠。我不介意它们是否重叠,这就是我明确添加 def concurrent = true 但它不起作用的原因。

我有 Quartz 插件的 0.4.2 版本和 Grails 1.3.7。我在这里做错了吗?似乎是一个非常简单易用的功能。我不反对使用 Executor 插件,但似乎我不应该这样做。

我不确定这是否重要,但在这种情况下,我从配置加载的 cronExpression 意味着每分钟执行一次此作业:“0 * * * * ?”

4

1 回答 1

1

显然,有一个我不知道的隐藏配置使它无法正常工作。在我的 conf 文件夹中有一个名为 quartz.properties 的文件,其中包含以下属性:

org.quartz.threadPool.threadCount = 1

增加这个数字后,即使我的工作还没有完成上一次执行,它也会触发。

于 2012-10-17T16:17:47.743 回答