Grails Quartz Plugin并发无法正常工作

时间:2012-10-16 20:20:14

标签: grails quartz-scheduler

我无法让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 * * * *?”

1 个答案:

答案 0 :(得分:1)

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

org.quartz.threadPool.threadCount = 1

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