2013-09-26 121 views
4

我正在使用Spring批處理執行一個批處理,它在數據庫中創建一些對象,從這些對象創建一個文件,然後將該文件發送到FTP服務器。因此,我有兩個步驟:一個從DB讀取conf,插入到數據庫並創建文件;第二個將文件發送到FTP服務器。Spring批處理 - 整個作業中的一個事務

問題是當FTP服務器出現問題時,我無法回滾事務(取消插入到數據庫中的新插入)。

如何配置我的作業在不同的步驟中只使用一個事務?

回答

2

由於spring-batch的事務性質,這是一個壞主意。
恕我直言,一個簡單的解決方案應該是用工作開始時生成的令牌標記第1步中保存的數據,並且如果您的FTP上傳失敗,請移至清除步驟以刪除帶有令牌的所有數據。

+0

感謝所有條目,這是我最後的解決方案:標記新創建的對象作爲「尚未發送「標誌並在」發送到FTP「步驟成功時進行更改。另外,我會嘗試使用代碼片段從失敗的步驟重新啓動批處理。 – Zava

2

同意bellabax:這是一個壞主意。

但我不會做第三次清理步驟,因爲此步驟也可能失敗,讓事務不回滾。

您可以用一個標誌來標記插入的條目,該標誌指示條目尚未發送到FTP。 第三步將切換標誌以指示這些條目已發送到FTP。

然後你只需要一個cron /批號/ 4清潔步驟/不管將刪除沒有被髮送到FTP

+0

我認爲我們運行相同的風險,在任何時候清理步驟可能會失敗。但是我們可以從失敗的步驟重新開始批處理。 – Zava

+0

這是沒有必要的第四步:正如我所說,它可以只是一個執行查詢的cron,它確實可以重新啓動而不會產生任何副作用 –

+0

在我看來,即使清理步驟失敗,這不是問題。因爲我不會使用任何標記爲「尚未發送」的對象。 – Zava

相關問題