錯誤現象:
在本地開發環境中,應用服務啟動後
trigger_state
直接就變為
error
前段時間在專案中,使用
quartz
配置乙個定時任務,定時任務都持久化到
oracle
資料庫中,但是應用伺服器啟動後,資料庫
qrtz_triggers
(trigger
資訊表)中,對應的任務資料的
trigger_state
欄位就直接變為
error
,導致定時任務不執行。
沒有錯誤
log日誌,出錯原因難定位。
對以下可能出錯的原因進行了調查:
1.quartz
檔案配置錯誤
①檢查配置檔案,調查結果是,配置檔案沒有發現錯誤。
②專案中已經配置有一條定時任務
a,但是任務
a能正常執行。
③將任務a的
quartz
配置注釋,只留下新增配置的定時任務,啟動後還是一樣報錯。
專案中,其他子系統也使用了
quartz
配置定時任務,可以排除不是
quartz
配置檔案錯誤。
2.定時任務實現類出錯
①定時任務實現類中,將業務邏輯全部注釋,只輸出
system.out.println
,但啟動後,也報錯。(經過很多次的除錯,有時應用伺服器啟動,也能正常的執行一次新增的定時任務,但後面
trigger_state
就又變為
error)
②將新增的定時任務配置的時間,由
2分鐘改為
10秒後,定時任務能正常執行。
3.發現資料庫
qrtz_scheduler_state
(排程器狀態表)中,有很多條資料。表示有很多例項應用都在執行
quartz。
經過這些測試和調查,發現是其它機器可能將新增的定時任務取走執行,但是其它機器上又沒有配置該新增定時任務,然後再排程該任務的時候就將資料庫
qrtz_triggers
(trigger
資訊表)中,對應的任務資料的
trigger_state
字段變為
error。
綜上所述,本地開發環境下,專案組成員使用同一資料庫進行開發時,每位開發人員在
quartz
中,配置的定時任務數量不一致。當應用服務啟動後,
quartz
任務排程器會根據資料庫
qrtz_triggers
(trigger
資訊表)中的資料執行
job,資料庫中已經存在新增的定時任務,而取走的應用服務
quartz
配置中並沒有配置該新增定時任務,執行時就將
trigger_state
變為error
,導致新增
job不能正常執行。
建議:使用
quartz
配置定時任務,多台伺服器使用同一資料庫進行開發時,保證資料庫
qrtz_scheduler_state
(任務排程表)中只有一條資料,這樣就能保證定時任務是自己的應用服務取走執行的。
osgi環境下 quartz集群方案
首先是osgi環境要ok,可以參考之前的部落格 然後是quartz集群方案,這個比較繞 最後是兩者的結合,這個很蛋疼,基礎不牢,搞了我一周 背景 集群環境下,quartz的任務會在每個節點上同時執行,這就亂套了,如果涉及到寫資料庫,還可能造成更大的麻煩,所以quartz在集群環境下需要考慮特殊解決方...
在Spring 下配置Quartz集群
由於專案將要上線,而專案中的quartz集群配置一直沒時間弄,本以為應該是一件挺簡單的事,沒想到gooble了一兩天才解決問題,主要是因為spring到3.0.7這個版本為止都沒有原生支援quartz的集群,原來的quartz配置在單例項下執行正常,配置集群之後各種異常都來了,今天終於配置成功,在這...
UltraEdit環境下,php簡單環境配置
1 語法高亮 選單 檢視 檢視方式 選中 php 2 自動補全 選單 高階 配置 自動完成 選中 自動顯示自動完成對話方塊 字元數選擇2 3為宜 3 php除錯 選單 高階 工具配置 插入 命令 選單項名稱 php除錯 命令列 選擇php cgi.exe所在目錄,並在最後 空格 f,如 e wamp...