Java 石英中的getJobDataMap提供空指针异常
我试图将一些数据放入Quartz作业数据映射中,并在实现作业类的类中访问它们。但它给了我空指针异常。当应用程序在没有访问作业数据映射的代码的情况下运行时,它可以正常运行 我使用Cron触发器来执行计划作业。在本例中,我将其配置为每20秒运行一次Java 石英中的getJobDataMap提供空指针异常,java,spring-boot,scheduled-tasks,quartz-scheduler,Java,Spring Boot,Scheduled Tasks,Quartz Scheduler,我试图将一些数据放入Quartz作业数据映射中,并在实现作业类的类中访问它们。但它给了我空指针异常。当应用程序在没有访问作业数据映射的代码的情况下运行时,它可以正常运行 我使用Cron触发器来执行计划作业。在本例中,我将其配置为每20秒运行一次 @Bean public Trigger simpleJobTrigger(@Qualifier("simpleJobDetail") JobDetail jobDetail) { CronTriggerFactoryBean factoryB
@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?我是否应该设置任何配置或属性?作业图此时不可用的原因是什么?
如何解决此问题?在我的代码中找到了问题。 在访问JobDataMap时,我按照以下方式访问它
jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
相反,在我的例子中,我应该从JobDetails访问它,而不是从触发器
jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();