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