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. sps和pps的简单理解记录

    最近博客写出了日记的既视感... 使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter S ...

  2. R语言学习笔记 (入门知识)

    R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...

  3. Loadrunner 26377错误

    26377错误的成因很多,总结最直接的结果就是No match found for the requested parameter "XXXXX".意思就是没有找到关联变量匹配的值 ...

  4. VMWare Workstation虚拟机网卡工作模式及配置方法

    打开VMware→虚拟机→设置.如下图 一. 桥接模式(Bridge) 可将虚拟系统IP与本地系统设在同一网段,此时虚拟机相当于一台网络中与本机公用一个HUB的独立设备,网络中其他机器与虚拟机器.本地 ...

  5. 自然语言交流系统 phxnet团队 创新实训 项目博客 (六)

    从你进入软件开始,你就建立了和服务器的联系.这是一段和服务器的长连接,直到你退出此软件. 2D文字聊天界面大致实现了文字输入.发送消息.接收消息.你可以通过点击按钮让机器人开启聊天模式或者学习模式.又 ...

  6. Python之从numpy.array保存图片

    1.用scipy import scipy scipy.misc.imsave('test.jpg', img) 2.用PIL from PIL import Image im = Image.fro ...

  7. C++ 指针二维数组, C++二维指针数组笔记

    C++ 二维动态数组 一. 已知第一维 #include <iostream> using namespace std; int main(int argc, char const *ar ...

  8. 【转】【WPF】关于依赖属性的ValidateValueCallback,PropertyChangedCallback和CoerceValueCallback的执行顺序

    三个回调对应依赖属性的验证过程,改变过程和强制转换过程. class Dobj : DependencyObject { //依赖属性包装 public int MyProperty { get { ...

  9. Java如何处理异常方法?

    在Java编程中,如何处理异常方法? 本例展示了如何使用System类的System.err.println()方法处理异常方法. package com.yiibai; public class E ...

  10. physical------Collider 组件参考

    Collider 组件参考 点击 属性检查器 下面的 添加组件 按钮,然后从 添加碰撞组件 中选择需要的 Collider 组件,即可添加 Collider组件到节点上. Collider 组件属性 ...