問(wèn)題:Quartz調(diào)用定時(shí)任務(wù),使用對(duì)象不是通過(guò)Spring容器生成怎棱。定時(shí)任務(wù)里面存在Bean需要注入就報(bào)NullPointException錯(cuò)誤哩俭。代碼如下:
@Component
public class ProdClearTaskEntrance extends ClearTaskEntrance implements Job {
/**
* 數(shù)據(jù)庫(kù)
*/
@Autowired
private Dbop dbop;
}
調(diào)用dbop就會(huì)報(bào)出NullPointException錯(cuò)誤
方案:修改該問(wèn)題就需要將對(duì)象創(chuàng)建由Spring容器來(lái)完成。
設(shè)置Spring容器完成對(duì)象生成
@Component
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// 調(diào)用父類(lèi)的方法
Object jobInstance = super.createJobInstance(bundle);
// 進(jìn)行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
設(shè)置定時(shí)調(diào)用對(duì)象Scheduler
@Configuration
public class QuartzConfig {
private JobFactory jobFactory;
public QuartzConfig(JobFactory jobFactory){
this.jobFactory = jobFactory;
}
/**
* 配置SchedulerFactoryBean
*
* 將一個(gè)方法產(chǎn)生為Bean并交給Spring容器管理
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
// Spring提供SchedulerFactoryBean為Scheduler提供配置信息,并被Spring容器管理其生命周期
SchedulerFactoryBean factory = new SchedulerFactoryBean();
// 設(shè)置自定義Job Factory拳恋,用于Spring管理Job bean
factory.setJobFactory(jobFactory);
return factory;
}
@Bean(name = "scheduler")
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
使用定時(shí)任務(wù)直接注入Scheduler即可
/**
* 定時(shí)任務(wù)工廠(chǎng)
*/
@Autowired
private Scheduler scheduler;