当我们使用spring boot整合schedule创建定时任务时,出现空指针,很有可能是因为配置定时任务类,创建job对象的时候,由于job工程接收到任务类创建对象是通过反射创建,通过放射创建的对象并不会将该对象放入spring容器,而在定时任务类进行注入业务类的时候无法注入。所以需要手动的将任务类对象放入spring容器中。
步骤:
1.定义创建任务类的类,并继承AdaptableJobFactory,该类负责创建任务类对象,但是原始的类并没有把创建好的类放入spring容器,所以需要重写其中的方法手动将任务类放入spring容器。
2.将上一步创建的对象放入任务工厂对象中

附加:
定时类配置代码

package com.example.quartz;import org.quartz.CronScheduleBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;@Configurationpublic class QuartzConfig { //创建job对象 @Bean public JobDetailFactoryBean jobDetailFactoryBean(){ JobDetailFactoryBean factory = new JobDetailFactoryBean(); //factory接收到QuartzJob类对象后,通过反射方式创建对象,并没有放入spring容器中。 factory.setJobClass(QuartzJob.class); return factory; } //创建simple trigger对象 @Bean public SimpleTriggerFactoryBean simpleTriggerFactoryBean(){ SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean(); //关联jobDetail对象 factory.setJobDetail(jobDetailFactoryBean().getObject()); //间隔毫秒数 factory.setRepeatInterval(2000); //重复次数 return factory; } //创建crontrigger @Bean public CronTriggerFactoryBean cronTriggerFactoryBean(){ CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setJobDetail(jobDetailFactoryBean().getObject()); factory.setCronExpression("0/1 * * * * ?"); return factory; } @Bean public SchedulerFactoryBean schedulerFactoryBean(MyJobDetailFactoryBean myJobDetailFactoryBean){ SchedulerFactoryBean factory = new SchedulerFactoryBean(); //关联trigger factory.setTriggers(simpleTriggerFactoryBean().getObject()); //将前面的覆盖掉。 factory.setTriggers(cronTriggerFactoryBean().getObject()); factory.setJobFactory(myJobDetailFactoryBean); return factory; }}