【发布时间】:2019-08-03 01:08:23
【问题描述】:
我需要在 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"
谢谢
【问题讨论】:
-
AtomicInteger counter = new AtomicInteger()呢? -
@injecteer 好的...我是 Grails 和 Java 的新手,请问如何在我的代码上下文中使用它?
标签: grails groovy quartz-scheduler grails-plugin