在执行内部方法中我得到了Object但是在执行完成后,类级变量又变为NULL?为什么呢?
public class CampaignJob extends QuartzJobBean {
Scheduler scheduler ;
JobExecutionContext jobExecutionContext ;
@Override
protected void executeInternal(JobExecutionContext jobCtx)
throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("ExecuteInternal method is called.....");
SchedulerContext schedCtx = null;
// jobCtx.getTrigger().getFinalFireTime().setSeconds(0);
jobCtx.getTrigger().setStartTime(new Date());
try {
schedCtx = jobCtx.getScheduler().getContext();
ApplicationContext appCtx = (ApplicationContext) schedCtx.get("applicationContext");
//here i am getting scheduler obj i want ot use in other method
scheduler = jobCtx.getScheduler();
jobExecutionContext = jobCtx;
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:1)
单个作业执行之间不保留实例变量只是因为Quartz为每个作业执行创建了一个新的JobDetail(CampaignJob)实例。
请注意,JobExecutionContext实例始终特定于特定作业执行(例如,它指的是执行作业的触发器),因此在单个作业执行之间保留它是没有任何意义的。
如果要在各个作业执行之间保留任何数据,您可能需要查看Quartz StatefulJob接口,该接口使得对JobDataMap进行Quartz持久更改(可通过JobExecutionContext访问)。考虑到Quartz使用标准的Java Serialization API来序列化和反序列化JobDataJMap内容,有一些关于你应该/不应该放入JobDataMap的规则。