簡體   English   中英

Quartz中的getJobDataMap給出了Null Pointer異常

[英]getJobDataMap in Quartz gives Null Pointer exception

我試圖將一些數據放入Quartz作業數據圖中,並在實現Job類的類中訪問它們。 但這給了我空指針異常。 當應用程序運行時沒有訪問Job Data Map的代碼時,它運行良好。

我使用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? 我應該設置任何配置或屬性嗎? 這時無法提供工作圖的原因是什么? 我該如何解決?

在我的代碼中發現了問題。 訪問JobDataMap時,我已經通過以下方式對其進行了訪問。

jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();

相反,就我而言,我應該從JobDetails(而不是觸發器)訪問它。

jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM