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

问题描述 投票:0回答:1

我需要在执行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"

谢谢

grails groovy quartz-scheduler grails-plugin
1个回答
0
投票

我从未在我的应用程序中使用过context对象,但计数器可以直接实现:

class MyJob {
    //some static stuff

    AtomicInteger counter = new AtomicInteger()

    def execute(context) {
        counter.incrementAndGet()    
        println counter.intValue()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.