Quartz項目上線後,項目應用和資料庫(MYSQL)在同一台伺服器上,然後經常是一個任務正常執行完之後,任務狀态變為了ERROR,網上找了很多
1.有的說quartz版本2.1.7有問題,換版本就好了,但是我的工程不是2.1.7 版本,然後我把2.2.1-2.3.0都試了,一樣的錯
2.很奇怪我項目幾乎每次跑都會報這個錯,但是網上隻有一個人提到過類似問題
轉到本地跑正常,于是将應用伺服器和資料庫伺服器分開,還是直接報錯,
突然靈光一閃,看了下伺服器時間,比中原標準時間快了2分多鐘,将伺服器時間調為中原標準時間,再跑,問題解決!
具體原因不明。。。
整理一下思路,也對這個問題做一個記錄。以後找到原因再來更新。
============================================================================================================
分割線
============================================================================================================
今天問題又出現了,網上查不到什麼資料,經過一個下午的排查,直接說結論:
原因是我之前有個工程也是用了這11張QUARTZ表,我還自作聰明的将quartz.properties裡的屬性
org.quartz.scheduler.instanceName: 分别設定成了兩個不同的名字,然而并沒有什麼卵用。
根據tomcat日志可以看出其實之前的工程A将所有的QUARTZ裡的job都排程了,但是因為A工程不存在B工程的代碼,顯然,會報錯。
解決辦法也顯而易見,要不就放到一個工程裡,要不就使用不同的庫或不同的QUARTZ表。
============================================================================================================
分割線
============================================================================================================
問題再次出現,發現将所有相關的項目從tomcat移除【Undeploy】,即,确認沒有項目在跑後,資料庫裡的Quartz相關的表的狀态還是會變(上次執行執行,下次執行時間,狀态變為ERROR)
解決過程:1.将所有部署過項目的tomcat關掉重新開機,資料庫裡的Quartz相關的表的狀态就不變了
2.因為其他工作,重新打包的時候,将web.xml裡的一段注釋掉之後,發現居然QUARTZ還能正常跑(生産機在跑,測試機和本地都是正常沒跑)
web.xml
<!-- <servlet>
<servlet-name>quartz-init</servlet-name>
<servlet-class>com.xxx.xxx.quartz.fitter.QuartzInit</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet> -->
解釋一下,應該都能知道這一段意思是項目啟動時調這個類,我在裡面就一句話,啟動quart的排程器,進而實作啟動項目就啟動quartz。
按這個項目的開發經驗說,不加這句,QUART就不會自動啟動,但是這次意外打包,注釋掉這句後,居然QUARTZ還正常在跑,真的是特别正常,所有JOB都沒有再報錯了,而且确認了是在該伺服器跑的定時器(該伺服器有日志)
目前原因還未知,做個記錄,因為QUARTZ的一直以來的神經病事件,再網上尋求答案無果後寫下此文,也為其他人做一個參考
轉載于:https://www.cnblogs.com/jeanfear/p/8916799.html