QiYuAdmin-改造Quartz的Bean由SpringIOC容器管理(SpringBoot项目实战)

    xiaoxiao2021-04-13  41

    简介

    现在有个需求: 下图中我需要通过@Resource将SpringIOC容器里面的userService给直接注入到job里面,那原生的Quartz不支持,直接调用userService将会出现null

    此时就需要改造定时器,将定时器也用SpringIOC容器管理,具体改造如下所示

    增加类

    /** * 定时器配置 * * @author zhangqing * @date 2017年04月13日 */ @Configuration @EnableScheduling public class QuartzConfig { @Autowired private QiYuJobFactory qiYuJobFactory;//job工厂 @Bean public SchedulerFactoryBean schedulerFactoryBean() throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setOverwriteExistingJobs(true); // 延时启动 factory.setStartupDelay(20); // 自定义Job Factory,用于Spring注入 factory.setJobFactory(qiYuJobFactory); return factory; } } /** * FactoryBean * * @author zhangqing * @date 2017年04月13日 */ @Component public class QiYuJobFactory extends AdaptableJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 调用父类的方法 Object jobInstance = super.createJobInstance(bundle); // 进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }

    修改

    之前的SchedulerManager和QuartzManager做了一下改动,名字我也该了将QuartzManager改成了SchedulerUtil,感觉更加合适了。将这两个类也给SpringIOC去管理了。

    SchedulerUtil类里面改造了一下,注入了Scheduler。下载文件

    转载请注明原文地址: https://ju.6miu.com/read-669378.html

    最新回复(0)