2012-05-18 102 views
1

我現在正在與Qrtz合作,並發現許多次子作業未在母版作業執行後自動啓動。我調查了QRTZ庫中由log4j生成的日誌。我們發現表「qrtz_simple_triggers」中有一個觸發器丟失問題。自從Mother作業將觸發器插入到表「qrtz_triggers」之後發生了問題,然後立即將數據插入到「qrtz_simple_triggers」中。但對我而言,在完全插入表中的simeple觸發器期間,有一段時間延遲了約1秒,同時,從「線程池」到「更新」表中的「qrtz_triggers」中的觸發器狀態從「WAITING」在母工作沒有完成將觸發器插入「qrtz_simple_triggers」的時候「獲取」。所以,主線程在表中找不到簡單的觸發器,然後停止工作。 (對於那個孩子工作)石英:觸發器表插入方法

我的觀點是如何防止這種情況?我認爲這兩個插入語句不在同一個trasaction中。我現在正在對此進行調查,並假設將這些語句合併到同一事務中的解決方案。你會帶給我更多的想法嗎?

由於提前, 停止:)

+0

如何交易在您的應用程序進行管理,您使用春天來管理交易? – blob

+0

是Blob,但我不確定QRTZ如何管理其數據庫連接。是否爲每個爲工作作業打開的連接設置了自動提交。我也在爲此進行調查。 –

+0

僅供參考,我正在使用QRTZ版本。 1.8.6 :) –

回答

1

如果您使用Spring管理事務,然後檢查post

設置

org.quartz.jobStore.class = org.springframework.scheduling.quartz.LocalDataSourceJobStore 
+0

嗨Blob,非常感謝你的回答。這仍然不適用於我:( –

+0

有沒有辦法強制QRTZ通過使用autoCommit = false? 正如我通過修改QRTZ JAR中的源代碼,然後重新將其重新包裝到我的項目中。需要通過QRTZ中的代碼進行設置。不適用於屬性。 –