单独使用Quartz 2.1.7 时Job属性Spring无法注入
在使用Quartz的时候遇到一个问题:
原因:
当前使用的是Spring-Quartz,xml配置,但是Job太多,导致很多的xml配置
目的:
不使用spring-quartz的配置,单独使用quartz,因为Job太多,配置文件太臃肿,而且尽量不去更改现有的Job代码,因为Job太多,更改难免会出现问题。
因为现有的Job中有很多Spring的属性依赖,不打算放到JobExecutionContext中,还要再取出来
问题:
原来的Job是Spring自动扫描的,属性可以自动注入,现在换成使用单独的Quartz,属性不能注入了(具体原因没有细看)
解决方法:
方法1:
网上查找到的方法是 一个类继承 AdaptableJobFactory
当前版本的Quartz 2.1.7的Scheduler中有一个方法 setJobFactory
然后,如下
public class JobFactory extends AdaptableJobFactory {@Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { //调用父类的方法 Object jobInstance = super.createJobInstance(bundle); //进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; }
}
sched.setJobFactory(jobFactory);
再去看原来Job中的属性,已经被注入了。
方法2:
public class ApplicationContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;@SuppressWarnings("all")public void setApplicationContext(ApplicationContext context) throws BeansException {if(this.applicationContext != null) {throw new IllegalStateException("ApplicationContextHolder already holded 'applicationContext'.");}this.applicationContext = context;}public static ApplicationContext getApplicationContext() {if(applicationContext == null)throw new IllegalStateException("'applicationContext' property is null,ApplicationContextHolder not yet init.");return applicationContext;}public static Object getBean(Class<?> clazz) {return null == applicationContext ? null : applicationContext.getBean(clazz);}public static Object getBean(String beanName) {return getApplicationContext().getBean(beanName);}public static void cleanHolder() {applicationContext = null;}
}
使用方法
在Job中使用 ApplicationContextHolder.getBean() 赋值给原来需要注入的属性。
推荐使用方法1 ,没有侵入性,而且需要更改的代码量最少。
单独使用Quartz 2.1.7 时Job属性Spring无法注入相关推荐
- JAVA_OA管理系统(四)番外篇:使用Spring注解注入属性
本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...
- spring实现属性值的注入
首先创建一个实体类User @Data @Builder @NoArgsConstructor @AllArgsConstructor public class User {private Strin ...
- 【报错笔记】在eclipse中做Spring项目时,创建Spring容器时老是出错
在eclipse中做Spring项目时,创建Spring容器时老是出错 写完这句代码无法导包,最后发现包导错了,我原来导的4.3.9的包,而且是后缀为其他的包,而且对JDK也有要求,我又下载了5.0. ...
- 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...
这一章节我们来讨论一下如何通过属性注入Bean? 这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入还有一个对象的引用. 1.如何通过属性向对象注入值? (1)dom ...
- spring bean配置_在运行时交换出Spring Bean配置
spring bean配置 如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人都已经熟悉了它的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来 ...
- 在运行时交换出Spring Bean配置
如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人已经熟悉了Spring的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来重新连接Bean内部 ...
- Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件...
1.Spring依赖注入的方式 通过set方法完成依赖注入 通过构造方法完成依赖注入 2.依赖注入的类型 基本数据类型和字符串 使用value属性 如果是指向另一个对象的引入 使用ref属性 User ...
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
转:http://blog.csdn.net/xlgen157387/article/details/40349929 (1)下边的一个Java类包含了所有Map.Set.List.数组.属性集合等这 ...
- quartz集群分布式(并发)部署解决方案-Spring - 推酷
quartz集群分布式(并发)部署解决方案-Spring - 推酷 quartz集群分布式(并发)部署解决方案-Spring - 推酷 posted on 2015-09-05 16:03 lexus ...
最新文章
- 八款开源 Android 游戏引擎 (巨好的资源)
- Jackson ObjectMapper
- 2-4 测试案例helloWorld
- Android应用开发—onSaveInstanceState方法什么时候被调用?
- matplotlib使用GridSpec自定义子图位置 (非对称的子图)
- 0.IT-解决方案-0-VOIP
- (23)FPGA锁存器与缓冲器的区别
- Symantec 赛门铁克招聘 Security Response Manager
- Ubuntu16.04安装VirtualBox及无法启动的解决办法
- SpringAop源码一:通知方法优先级
- java list取补集_Java 2 个 List 集合数据求并、补集操作
- 计算机中桌面位置更改,电脑默认桌面文件夹位置修改不了怎么办
- 洛谷 P5594 【XR-4】模拟赛
- php伪协议xss,XSS漏洞学习
- dodo:人脸识别方法个人见解
- Excel插件获取单元格批注以及设置批注
- 【从零开始玩量化12】无风险利率
- 用HTML+CSS仿网易云音乐网站(6个页面)_实训素材
- 明确无非升即走!博士50-80万房补!特聘副研年薪20万+, 这所高校2023年招聘
- 行频 场频 分辨率公式推导(推荐)