当前位置: 首页 > 知识库问答 >
问题:

Grails石英插件并发不工作

黎震博
2023-03-14

我很难让Grails中的Quartz工作按预期同时运行。这就是我的工作。我已经注释掉了使用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插件,但似乎我不应该这么做。

我不确定这是否重要,但在本例中,我从config加载的cronExpression意味着每分钟都要执行这个作业:“0****?”

共有1个答案

施弘壮
2023-03-14

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

org.quartz.threadPool.thread计数=1

在增加这个数字后,我的作业甚至在尚未完成上一次执行时也会触发。

 类似资料:
  • 我有一个使用Grails开发的Web应用程序。我正在尝试实现一个后台进程,该进程使用Grails的quutz1.0-RC9插件每5分钟扫描一次DB中的表。 在尝试编写实际逻辑之前,我正在学习如何使用这个插件,因为我是石英的新手。所以我创建了一个作业,每5秒打印一次带有当前时间戳的消息“hai”。 还有我的QuartzConfig。groovy是 当使用命令运行时,这可以正常工作。但是当使用命令创建

  • 我正在使用和Quartz Grails插件2.0.13构建一个应用程序,有一些旧作业我将它们迁移到我的新应用程序,它们以前工作正常,但是现在我在尝试从页面手动运行它们时收到以下错误,在创建新作业并尝试手动运行它后也会收到相同的错误。知道可能导致此错误的原因以及如何解决它吗? 以下是我的工作示例:

  • 我已经为我的圣杯项目安装了石英插件,并创建了Job。 BuildConfig.groovy 现在我想用下面的插件来监控我创建的作业。 https://grails.org/plugin/quartz-monitor 要安装此插件,它说 在BuildConfig.groovy中添加依赖项: 我补充道 但它给出的错误为: 在深入挖掘之后,我了解了grails的插件库 http://repo . gra

  • 另外,如果我使用下面的语句而不是自动调用Spring Quartz调度器,那么作业将成功激发 请让我知道我做错了什么...

  • 我想用quartz scheduler使用jdbc数据存储立即执行作业~。然而,即使我使用now()或调用triggerjob进行调度,在调度和触发器fire之间也有20-30秒的延迟。 我尝试用一个简单的触发器执行作业: 并且我还尝试用调度程序触发: 下面是显示延迟的侦听器日志。

  • 问题内容: 这应该真的很容易。我使用的是在Apache Tomcat 6.0.18下运行的Quartz,我有一个jobs.xml文件,该文件设置了每分钟运行的计划作业。 我想做的是,如果下一个触发时间到来时该作业仍在运行,则我不想启动新作业,因此可以让旧实例完成。 有没有办法在Jobs.xml中指定此设置(防止并发实例)? 如果不是,是否可以共享我的应用程序Job实现中对内存中单例的访问(这是通过