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