在执行内部方法中,我得到了对象,但在其执行完成后,类级变量再次变为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();
}
}
最佳答案
在各个作业执行之间不会保留实例变量,因为 Quartz 会为每个作业执行创建一个新的 JobDetail (CampaignJob) 实例。
请注意,JobExecutionContext 实例始终特定于特定作业执行(例如,它指的是执行作业的触发器),因此在各个作业执行之间保留它没有任何意义。
如果您想在各个作业执行之间保留任何数据,您可能需要查看 Quartz StatefulJob 接口(interface),该接口(interface)使 Quartz 持久保存对 JobDataMap 所做的更改(可通过 JobExecutionContext 访问)。考虑到 Quartz 使用标准 Java 序列化 API 来序列化和反序列化 JobDataJMap 内容,因此存在一些关于应该/不应该放入 JobDataMap 中的规则。
关于java - quartz 我如何将 JobExecutionContext 和 Scheduler 的范围更改为类级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158235/