我需要在执行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()
}
}