【发布时间】:2017-12-12 19:51:33
【问题描述】:
我正在尝试将一些数据放入 Quartz 作业数据映射中,并在实现 Job 类的类中访问它们。但它给了我空指针异常。当应用程序在没有访问作业数据映射的代码的情况下运行时,它运行良好。
我使用 Cron 触发器来执行计划的作业。在本示例中,我将其配置为每 20 秒运行一次。
@Bean
public Trigger simpleJobTrigger(@Qualifier("simpleJobDetail") JobDetail jobDetail) {
CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
factoryBean.setJobDetail(jobDetail);
factoryBean.setStartDelay(0L);
factoryBean.setName("test-trigger");
factoryBean.setStartTime(LocalDateTime.now().toDate());
factoryBean.setCronExpression("0/20 * * * * ?");
factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
try {
factoryBean.afterPropertiesSet();
} catch (ParseException e) {
e.printStackTrace();
}
return factoryBean.getObject();
}
以下是我的simpleJobDetail bean。
@Bean
public JobDetailFactoryBean simpleJobDetail() {
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
factoryBean.setJobClass(Executor.class);
factoryBean.setDurability(true);
factoryBean.setName("test-job");
factoryBean.getJobDataMap().put("caller", "James");
return factoryBean;
}
这是我的execute 方法。
public class Executor implements Job {
@Autowired
ScheduledTaskService scheduledTaskService;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
JobDataMap jobDataMap = null;
try {
jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
String caller = jobDataMap.get("caller").toString();
System.out.println("This is called by the user "+caller);
} catch (Exception e) {
//e.printStackTrace();
System.out.println("UNABLE TO ACCESS THE JOB DATA MAP "+e);
}
scheduledTaskService.doThePayment();
}
}
当我运行应用程序时,它会打印 catch 子句中给出的日志。
无法访问作业数据映射 java.lang.NullPointerException
为什么 execute 方法无法访问 JobDataMap ?我应该设置任何配置或属性吗?工作地图此时无法使用的原因是什么? 我该如何解决这个问题?
【问题讨论】:
标签: java spring-boot scheduled-tasks quartz-scheduler