私はいくつかのデータをQuartzジョブデータマップに入れて、Jobクラスを実装するクラスにアクセスしようとしています。しかし、それは私にヌルポインタ例外を与えます。ジョブデータマップにアクセスするコードなしでアプリケーションを実行すると、正常に動作します。QuartzのgetJobDataMapによってヌルポインタ例外が発生する
私は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
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句に指定されたログが出力されます。
JOBデータマップのjava.lang.NullPointerExceptionにアクセスすることができません
なぜ方法はJobDataMapへのアクセスに失敗した実行?設定する必要がある設定やプロパティはありますか?この時点で就職マップが利用できない理由は何ですか? どうすれば解決できますか?