博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot开发案例之整合Quartz注入Service
阅读量:6039 次
发布时间:2019-06-20

本文共 2447 字,大约阅读时间需要 8 分钟。

003

前段时间做了一个基于(脚手架而已),很多功能不是特别完善,由于工作原因,断断续续一直在更新中,码云上有个小伙伴提问说:Job中service自动注入报错怎么解决?正好之前做的项目中有使用到注入相关的功能,顺便也集成进去。

缘由

简单来说就是quartz中的Job是在quartz中实例化出来的,不受spring的管理,所以就导致注入不进去了。

解决

定义SpringJobFactory类:

/** * 解决spring bean注入Job的问题 */@Component  public class SpringJobFactory extends AdaptableJobFactory  {           @Autowired        private AutowireCapableBeanFactory capableBeanFactory;            @Override        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {            // 调用父类的方法            Object jobInstance = super.createJobInstance(bundle);            // 进行注入            capableBeanFactory.autowireBean(jobInstance);            return jobInstance;        }    }

quartz配置:

/** * quartz配置 * 创建者 科帮网 * 创建时间    2018年4月3日 */@Configurationpublic class SchedulerConfig {        @Autowired    private SpringJobFactory springJobFactory;        @Bean(name="SchedulerFactory")    public SchedulerFactoryBean schedulerFactoryBean() throws IOException {        SchedulerFactoryBean factory = new SchedulerFactoryBean();        factory.setAutoStartup(true);        factory.setStartupDelay(5);//延时5秒启动        factory.setQuartzProperties(quartzProperties());        //注意这里是重点        factory.setJobFactory(springJobFactory);          return factory;    }    @Bean    public Properties quartzProperties() throws IOException {        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();        propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));        propertiesFactoryBean.afterPropertiesSet();        return propertiesFactoryBean.getObject();    }    /*     * quartz初始化监听器     */    @Bean    public QuartzInitializerListener executorListener() {       return new QuartzInitializerListener();    }    /*     * 通过SchedulerFactoryBean获取Scheduler的实例     */    @Bean(name="Scheduler")    public Scheduler scheduler() throws IOException {        return schedulerFactoryBean().getScheduler();    }}

测试任务案例TestJob:

/** * 实现序列化接口、防止重启应用出现quartz Couldn't retrieve job because a required class was not found 的问题 */public class TestJob implements  Job,Serializable {    private static final long serialVersionUID = 1L;           @Autowired      private IJobService jobService;         @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        System.out.println(jobService);//注入jobService 执行相关业务操作        System.out.println("任务执行成功");    }}

项目源码:

转载地址:http://foghx.baihongyu.com/

你可能感兴趣的文章
InfluxDB安装及配置
查看>>
Dynamics CRM Microsoft SQL Server 指定的数据库具有更高的版本号
查看>>
PAT Perfect Sequence (25)
查看>>
java.exe进程来源排查录
查看>>
点滴记录——Ubuntu 14.04中Solr与Tomcat整合安装
查看>>
C++实现KMP模式匹配算法
查看>>
ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
查看>>
记录锁
查看>>
JSONObject与JSONArray的使用
查看>>
[SQL Server] 数据库日志文件自动增长导致连接超时的分析
查看>>
【常见Web应用安全问题】---6、Script source code disclosure
查看>>
<html:form>标签
查看>>
除了《一无所有》,我一无所有
查看>>
每日英语:China Seeks to Calm Anxiety Over Rice
查看>>
C++中struct和class的区别 [转]
查看>>
C++ ofstream和ifstream详细用法
查看>>
Mysql 连接查询 Mysql支持的连接查询有哪些
查看>>
Hive Streaming 追加 ORC 文件
查看>>
打开Apache自带的Web监视器
查看>>
eclipse插件
查看>>