日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

quartz集群模式下qrtz_triggers表trigger_state变ERROR分析

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 quartz集群模式下qrtz_triggers表trigger_state变ERROR分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在正式環境新增了一個定時任務,項目啟動后,新增的任務總是跑一兩次就不跑了,排查發現trigger_state變為ERROR了。
一、Quartz重要表含義
1)qrtz_calendars:以Blob類型存儲Quartz的Calendar日歷信息, quartz可配置一個日歷來指定一個時間范圍。
2)qrtz_cron_triggers:存儲Cron Trigger,包括Cron表達式和時區信息。
3)qrtz_fired_triggers:存儲已經觸發的trigger相關信息,trigger隨著時間的推移狀態發生變化,直到最后trigger執行完成,從表中被刪除。
4)qrtz_job_details:存儲每一個已配置的Job的詳細信息。
5)qrtz_scheduler_state:存儲少量的有關 Scheduler的狀態信息,和別的 Scheduler 實例(假如是用于一個集群中)。
6)qrtz_simple_triggers:存儲簡單的 Trigger,包括重復次數,間隔,以及已觸的次數。
7)qrtz_triggers:存儲已配置的 Trigger的信息。
二、任務查詢
查詢qrtz_job_details、qrtz_triggers、qrtz_cron_triggers這三張表即可查到對應定時任務信息。
三、原因分析
1、任務啟動后可以正常跑完一次,且在測試時代碼正常運行,說明代碼是沒有問題的;
2、通過更改qrtz_triggers表trigger_state狀態為WAITING和next_fire_time(下次觸發時間)讓任務執行后,一段時間后,trigger_state又變成ERROR,且只有新增任務式這樣,其他定時任務都可以正常跑,確定問題出在新的任務上;
3、檢查qrtz_scheduler_state表查看是否存在多條記錄,如果有多條,只留一條;
4、檢查集群環境,或者查看是否有其他環境也和正式環境共用一個數據庫,檢查后發現,有個備用服務器,并未配置負載均衡,但是用的是正式數據庫且上面的應用為啟動狀態,檢查服務器上部署的應用發現服務器上的包并未更新,這個包并不包含新增的任務,關掉備用服務器,發現正式環境上的任務可以正常運行了。
注:
查看任務下次觸發時間

select qt.*,to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss') +qt.next_fire_time / 1000 / 24 / 60 / 60 nextFireTime,sysdate from qrtz_triggers qt

問題總結:
使用quartz集群模式時,若集群節點中應用服務器打的包版本不一致或者其他服務器用非最新版本包且與正式環境共用一個數據庫時,就會出現qrtz_triggers表trigger_state變ERROR情況,從而導致定時任務不能正常運行。究其原因quartz執行任務調度是根據數據庫表中的記錄執行的,如果執行到沒有對應代碼的節點時,trigger_state就會變成ERROR。

總結

以上是生活随笔為你收集整理的quartz集群模式下qrtz_triggers表trigger_state变ERROR分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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