日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

单独使用Quartz 2.1.7 时Job属性Spring无法注入

發布時間:2024/3/13 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单独使用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无法注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。