SpringBoot开发案例之整合Quartz注入Service

003.jpg

前段时间做了一个基于SpringBoot和Quartz任务管理系统(脚手架而已),很多功能不是特别完善,由于工作原因,断断续续一直在更新中,码云上有个小伙伴提问说: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日

 \*/

@Configuration

public 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("任务执行成功");

    }

}

项目源码: https://gitee.com/52itstyle/spring-boot-quartz

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

SpringBoot开发案例之整合Quartz注入Service

前段时间做了一个基于SpringBoot和Quartz任务管理系统(脚手架而已),很多功能不是特别完善,由于工作原因,断断续续一直在更新中,码云上有个小伙伴提问...

4386
来自专栏何俊林

插件开发之360 DroidPlugin源码分析(五)Service预注册占坑

在了解系统的activity,service,broadcastReceiver的启动过程后,今天将分析下360 DroidPlugin是如何预注册占坑的?本篇...

2096
来自专栏李家的小酒馆

Spring MVC面试整理

Spring MVC执行过程 1. 客户端的请求提交到dispatcherServlet 2. DispatcherServ...

2560
来自专栏菩提树下的杨过

spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置

与前面的一篇mybatis 3.2.7 与 spring mvc 3.x、logback整合 相比,只是web层的MVC前端框架,从spring mvc转换成s...

4195
来自专栏JAVA高级架构

Java面试中常问的Spring方面问题(涵盖七大方向共55道题,含答案)

Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何配置以及相互引入的。但是,XML 配置文件冗长且更加干净。如果没有正确规划和编...

933
来自专栏java思维导图

Spring思维导图,让Spring不再难懂(mvc篇)

在前面 生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。温故而知新,今天一起来复习一下spring mvc的内容吧...

3893
来自专栏ImportSource

Spring的三种Circuit Breaker

今天我们分享的内容是在spring下的三种circuit breaker的做法。接下来我们分别演示spring cloud netflix hystrix、sp...

6798
来自专栏我的博客

zend framework项目分组(初级版)

Zend_Controller_Front 控制了Zend_Controller系统的整个工作流。它是前端控制器(FrontController)模型的解释。Z...

2827
来自专栏CSDN技术头条

Spring Data REST 与 Spring RestTemplate 实战详解

这篇分为两部分内容进行介绍(Spring Data REST 和 Spring RestTemplate)。我之前有一篇文章完整的介绍了 HTTP 协议的内容,...

9145
来自专栏菩提树下的杨过

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,...

2055

扫码关注云+社区

领取腾讯云代金券