grails - Grails Quartz插件不记得作业执行之间的状态数据吗?

标签 grails groovy quartz-scheduler grails-plugin

我需要在执行Grails Quartz插件作业之间保持计数器值。它以正确的时间间隔运行,我可以设置jobDataMap并正确地读回该值(在同一执行运行期间),但它拒绝记住两次执行之间的值。

我已经按照文档建议设置了concurrent = false。有任何想法吗?我只需要坚持并增加一个计数器。我想尽可能避免使用数据库,我认为这应该只使用内存?还是其他解决方法?

我的TestJob.groovy,在/ server / grails-app / jobs中:

package myPackage
class MyJob {
    static triggers = {
        simple repeatInterval: 5000l // execute job every 5 seconds
    }

    def concurrent = false // Don't run multiple simultaneous instances of this job

    def execute(context) {
        if(context.jobDetail.jobDataMap['recCounter'] == null) { context.jobDetail.jobDataMap['recCounter'] = 1 }
        else { context.jobDetail.jobDataMap['recCounter'] = context.jobDetail.jobDataMap['recCounter'] + 1 }

        println(context.jobDetail.jobDataMap['recCounter'])
}

运行时的输出是每5秒换行'1'的新行。每次应该增加计数器。
1
1
1
1
etc..

我正在运行Grails 3.3.9,并且build.gradle在依赖项中具有compile "org.grails.plugins:grails-spring-websocket:2.4.1"
谢谢

最佳答案

我从未在我的应用程序中使用过context对象,但可以通过简单的方式实现计数器:

class MyJob {
    //some static stuff

    AtomicInteger counter = new AtomicInteger()

    def execute(context) {
        counter.incrementAndGet()    
        println counter.intValue()
    }
}

关于grails - Grails Quartz插件不记得作业执行之间的状态数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55123548/

相关文章:

grails - 为什么类名长度为一时,生成的 Controller 中没有注入(inject)服务?

grails - 如何从 Bootstrap 显示 grails 错误

java - 异常退出的 quartz 作业的数据持久性?

grails - Grails:如何在没有选择存储的情况下使用脚手架在 Controller 中处理多重选择?

grails - 运行Grails App时如何为嵌入式Tomcat指定Java选项(系统属性)?

java - 如何修复 groovy.lang.MissingMethodException : No signature of method

Groovy 代表按预期工作?

xml - groovy - xml - 保留属性顺序

grails - 在Grails中使用Quartz插件

quartz-scheduler - 将参数传递给 Quartz 中的作业