springBoot整合Quartz过程在下一篇博客。
问题描述:
springBoot整合Quartz后,job中注入的业务service为null。
原因:
Spring容器可以管理Bean,但是Quartz的job是自己管理的,如果在Job中注入Spring管理的Bean,需要先把Quartz的Job也让Spring管理起来,因此,我们需要重写JobFactory。
解决方法:
创建任务工厂:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@Component public class MyJobFactory extends AdaptableJobFactory { private final AutowireCapableBeanFactory capableBeanFactory; public MyJobFactory(AutowireCapableBeanFactory capableBeanFactory) { this.capableBeanFactory = capableBeanFactory; } @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 调用父类的方法 Object jobInstance = super.createJobInstance(bundle); // 进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }
将一个方法产生为Bean并交给Spring容器管理。
Spring为了能集成Quartz,特意提供了管理Quartz的schedulerFactoryBean,必须配置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33@Configuration public class StartSchedulerListener implements ApplicationListener<ContextRefreshedEvent> { @Autowired public MySchedulerFactory mySchedulerFactory; private final MyJobFactory myJobFactory; public StartSchedulerListener(MyJobFactory myJobFactory) { this.myJobFactory = myJobFactory; } // springboot 启动监听 @Override public void onApplicationEvent(ContextRefreshedEvent event) { try { mySchedulerFactory.scheduleJobs(); } catch (SchedulerException e) { e.printStackTrace(); } } //注入SchedulerFactoryBean @Bean public SchedulerFactoryBean schedulerFactoryBean() { // Spring提供SchedulerFactoryBean为Scheduler提供配置信息,并被Spring容器管理其生命周期 SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setStartupDelay(5);//延时5秒启动 // 设置自定义Job Factory,用于Spring管理Job bean schedulerFactoryBean.setJobFactory(myJobFactory); return schedulerFactoryBean; } @Bean(name = "scheduler") public Scheduler scheduler() { return schedulerFactoryBean().getScheduler(); } }
配置如上两个类,重新启动springboot工程,这时候就没问题了。
最后
以上就是坚强大碗最近收集整理的关于springBoot整合Quartz注入的业务service为空的全部内容,更多相关springBoot整合Quartz注入内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复