Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入

Spring4整合quartz2.2.3中Job任务使用@Autowired不能注入

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年9月6日

http://www.cnblogs.com/fanshuyao/

一、问题描述:

使用Spring整合quartz实现动态任务时,想在job定时任务中使用某个service时,直接通过加注解@Component、@Autowired是不能注入的,获取的对象为Null。如下面的代码:

  1. @Component
  2. @PersistJobDataAfterExecution
  3. @DisallowConcurrentExecution
  4. public class TicketSalePriceLessThanLowestPriceJob implements Job{
  5. @Autowired
  6. private XxxService xxxService;
  7. }

二、解决方案:

1、新增一个自定义类(CustomJobFactory),继承SpringBeanJobFactory,代码如下:

  1. import org.quartz.spi.TriggerFiredBundle;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
  4. import org.springframework.scheduling.quartz.SpringBeanJobFactory;
  5. public class CustomJobFactory extends SpringBeanJobFactory{
  6. @Autowired
  7. private AutowireCapableBeanFactory capableBeanFactory;
  8. @Override
  9. protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
  10. //调用父类的方法
  11. Object jobInstance = super.createJobInstance(bundle);
  12. //进行注入
  13. capableBeanFactory.autowireBean(jobInstance);
  14. return jobInstance;
  15. }
  16. }

2、在spring.xml文件配置CustomJobFactory,如下:

  1. <bean id="customJobFactory" class="cn.imovie.manage.task.job.CustomJobFactory"></bean>

3、将自定义CustomJobFactory注入到org.springframework.scheduling.quartz.SchedulerFactoryBean,具体如下:

  1. <property name="jobFactory" ref="customJobFactory"></property>

完整代码如下:

  1. <!-- 定时任务配置 start -->
  2. <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  3. <property name="dataSource" ref="dataSource"></property>
  4. <!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
  5. <property name="overwriteExistingJobs" value="true" />
  6. <!--必须的,QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->
  7. <property name="startupDelay" value="10" />
  8. <!-- 设置自动启动 -->
  9. <property name="autoStartup" value="true" />
  10. <property name="jobFactory" ref="customJobFactory"></property>
  11. <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
  12. <property name="configLocation" value="classpath:spring-quartz.properties" />
  13. </bean>
  14. <!-- 定时任务配置 end -->

4、然后就可以在Job任务类使用@Autowired注入service。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年9月6日

http://www.cnblogs.com/fanshuyao/

Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入的更多相关文章

  1. 在maven中开发Spring需要的jar依赖

    在maven中开发Spring需要的jar依赖 <properties> <spring.version>4.0.6.RELEASE</spring.version> ...

  2. Maven构建的Spring项目需要哪些依赖?

    Maven构建的Spring项目需要哪些依赖? <!-- Spring依赖 --> <!-- 1.Spring核心依赖 --> <dependency> <g ...

  3. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

  4. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  5. Spring 3整合Quartz 2实现定时任务--转

    常规整合 http://www.meiriyouke.net/?p=82 最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之 ...

  6. Spring整合Quartz

    目录[-] 一.Spring创建JobDetail的两种方式 二.整合方式一示例步骤 1.将spring核心jar包.quartz.jar和Spring-context-support.jar导入类路 ...

  7. Spring Boot整合Quartz实现定时任务表配置

    最近有个小项目要做,spring mvc下的task设置一直不太灵活,因此在Spring Boot上想做到灵活的管理定时任务.需求就是,当项目启动的时候,如果有定时任务则加载进来,生成schedule ...

  8. Spring 整合 Quartz 实现动态定时任务

    复制自:https://www.2cto.com/kf/201605/504659.html 最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能 ...

  9. Spring Boot 应用系列 6 -- Spring Boot 2 整合Quartz

    Quartz是实现定时任务的利器,Quartz主要有四个组成部分,分别是: 1. Job(任务):包含具体的任务逻辑: 2. JobDetail(任务详情):是对Job的一种详情描述: 3. Trig ...

随机推荐

  1. 递归 - 求 n 个球中取 m 个不同的球,有多少种取法?

    代码: #include <iostream> using namespace std; int F(int _n, int _m) { if(_n < _m) return 0; ...

  2. DPI (深度报文检测) 关于DPI的学习笔记

    关于DPI的学习笔记 先看一下定义 : DPI(Deep Packet Inspection)是一种基于数据包的深度检测技术,针对不同的网络应用层载荷(例如HTTP.DNS等)进行深度检测,通过对报文 ...

  3. 原创:《Excel在零售及电商行业数据化管理中的应用》之“什么是数据化管理?

    <Excel在零售及电商行业数据化管理中的应用>之“什么是数据化管理?”                     各位: “随着全零售时代的到来,传统商业的每一个供应链细节都离不开数据的支 ...

  4. c# 正则表达式 首字母转大写

    class Program { static void Main(string[] args) { // Input strings. const string s1 = "samuel a ...

  5. Tomcat 部署一工程时Deploy Location 为什么 是 INVALID

    1.eclipse项目: 在项目的.settings目录下,找到org.eclipse.wst.common.component文件: <?xml version="1.0" ...

  6. Unity-------------------------关于GUI绘制的编程

    转载:在这篇文章中我将给读者介绍Unity中的图形用户界面(GUI)编程.Unity有一个非常强大的GUI脚本API.它允许你使用脚本快速创建简单的菜单和GUI. 简介 Unity提供了使用脚本创建G ...

  7. Linux CPU Load Average

    理解Linux系统负荷 LINUX下CPU Load Average的一点研究 Linux load average负载量分析与解决思路 Understanding Linux CPU Load - ...

  8. c# mvc 获取 HtmlHelper 表达式值和时间格式化 去边框

    /// <summary> /// 返回没有边框的只读的TextBox标签 /// </summary> /// <typeparam name="TModel ...

  9. VIM选择文本块/复制/粘贴

    在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择.其它相关命令:v:按字符选择.经常使用的模式,所以亲自尝试一下它. V:按行选择.这在你想拷贝或者移动很 ...

  10. C# 判断字符串为空有哪几种方法

    Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...