我使用quartz 2.2.1和mysql als jdbc store,我有一个简单的工作:
package foo;
import org.quartz.*;
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class FooJob2 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
int count = (int) jobExecutionContext.getJobDetail().getJobDataMap().get("foobar");
System.out.println("lala neu 3 " + count);
jobExecutionContext.getJobDetail().getJobDataMap().put("foobar", count++);
}
}
我安排这样的工作,但任何时候工作打印foobar数字它不会增加。我需要做些什么才能保留jobdatamap?
public class TestStore {
public static void main(String[] args) throws SchedulerException, InterruptedException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
JobDataMap data = new JobDataMap();
data.put("foobar", 12);
// data.put("foobar", "12");
// define the job and tie it to our HelloJob class
JobDetail job = newJob(FooJob2.class)
.withIdentity("job6", "group1")
.storeDurably()
.usingJobData(data)
.build();
// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger6", "group1")
.startNow()
//.usingJobData(data)
.withSchedule(simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
Set<Trigger> triggers = new HashSet<>();
triggers.add(trigger);
try {
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException se) {
System.out.println("update job");
scheduler.addJob(job, true);
}
// Thread.sleep(6000);
// scheduler.shutdown();
}
}
答案 0 :(得分:2)
在行中使用++count
。
jobExecutionContext.getJobDetail().getJobDataMap().put("foobar", ++count);