Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 石英中的getJobDataMap提供空指针异常_Java_Spring Boot_Scheduled Tasks_Quartz Scheduler - Fatal编程技术网

Java 石英中的getJobDataMap提供空指针异常

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

我试图将一些数据放入Quartz作业数据映射中,并在实现作业类的类中访问它们。但它给了我空指针异常。当应用程序在没有访问作业数据映射的代码的情况下运行时,它可以正常运行

我使用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();