天天看點

Quartz持久化到資料庫後,一到執行時間,任務狀态就變為ERROR的一系列解決過程...

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