初識spring與quartz整合實現定時任務

qingyezhu發表於2015-03-14

參考資料:

http://kevin19900306.iteye.com/blog/1397744

 

引用自別人的部落格:

特別注意一點,與Spring3.1以下版本整合必須使用Quartz1,最初我拿2.1.3的,怎麼搞都報錯:
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.scheduling.quartz.CronTriggerBean] for bean with name 'mytrigger' defined in class path resource [applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class

檢視發現spring3.0.5中 org.springframework.scheduling.quartz.CronTriggerBean繼承了 org.quartz.CronTrigger(public class CronTriggerBeanextends CronTrigger),而在quartz2.1.3中org.quartz.CronTrigger是個介面(publicabstract interface CronTrigger extends Trigger),而在quartz1.8.5及1.8.4中org.quartz.CronTrigger是個類(publicclass CronTrigger extends Trigger),從而造成無法在applicationContext中配置觸發器。這是spring3.1以下版本和quartz2版本不相容的一個 bug。(感謝tiren的回覆,spring3.1以及以後版本支援quartz2)

備註:本人下載的quartz2.2.1中的org.quartz.CronTrigger是個介面,且Spring4.0.5中org.springframework.scheduling.quartz.CronTriggerBean繼承了org.quartz.CronTrigger,故只好使用quartz1.8.5

在Spring中使用Quartz有兩種方式實現:第一種是任務類繼承QuartzJobBean,第二種則是在配置檔案裡定義任務類和要執行的方法,類和方法仍然是普通類。很顯然,第二種方式遠比第一種方式來的靈活。

相關文章