我正在学习Quartz Job Scheduler框架(使用jboss 5.1中的1.5.2版)。我试图理解有状态和无状态工作之间的区别。
据记载,在作业执行期间在JobDataMap中所做的任何更改都不会在下次执行非有状态作业的作业时保留,但在有状态的作业中也会保留相同的内容。
为了测试上面的内容,我编写了一个非有状态的作业,在执行作业期间正在修改JobDataMap。根据上述逻辑,在下次执行作业期间不应保留或提供更改。 但是,似乎确实通过执行作业来保持更改。
这是工作班:
public class QuartzTask implements Job{
@Override
public void execute(JobExecutionContext arg) throws JobExecutionException {
// TODO Auto-generated method stub
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(arg.getTrigger().getName()+" task executed:"+timeStamp);
System.out.println("before put:"+arg.getMergedJobDataMap().get("data"));
arg.getJobDetail().getJobDataMap().put("data", "added");
System.out.println("after put:"+arg.getMergedJobDataMap().get("data"));
}
}
如果我执行上述作业2次,则输出应如下所示:
放入之前:null
之后:添加
放入之前:null
之后:添加
但是,输出看起来像这样:
放入之前:null
之后:添加
放入之前:添加
之后:添加
我在这里错过了什么导致这种行为?