我遇到 一個棘手的問題 :java
兩臺服務器,JDK環境都是 1.7.79,都是採用jetty發佈,項目中都採用了spring的quartz FactoryBean ,生成Scheduler,結果在內網的那臺服務器上可以正常發佈,一轉到阿里的服務器環境,就出現了異常以下:ERROR context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduleJobInit': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.quartz.Scheduler.getTrigger(Lorg/quartz/TriggerKey;)Lorg/quartz/Trigger; web
按照spring容器初始化的機制 ,是不可能出現注入的Bean爲空的,除非那個Bean在建立時已經出現了問題。若出現了問題 則不會在這個位置拋出異常了,而是在建立那個須要注入的bean時就已經出現異常了。spring
剛剛終於找到緣由了,主緣由是由於包衝突了 quartz-2.2.1.jar和quartz-1.5.1.jar兩個包都在lib下。雖然我在開發環境中已經在pom.xml中刪除了1.5的dependence配置,可是在jenkins的workspace中仍然還有這個jar,因此在打包的時候打進去了。 看來有時候jenkins中使用mvn同時執行clean 和packeage命令也不必定靠譜吧。得去手動清理掉workspace下的target文件夾內容,纔是最安全的。安全
就是包衝突問題。那麼爲何Spring沒有拋出異常呢。稍後抽時間再對org.springframework.scheduling配置了日誌輸出看目的地吧,到目前爲止就已經將上面的問題解決了。多個quartz包。服務器
亂了亂了~~~~spa