我正在使用Spring批處理執行一個批處理,它在數據庫中創建一些對象,從這些對象創建一個文件,然後將該文件發送到FTP服務器。因此,我有兩個步驟:一個從DB讀取conf,插入到數據庫並創建文件;第二個將文件發送到FTP服務器。Spring批處理 - 整個作業中的一個事務
問題是當FTP服務器出現問題時,我無法回滾事務(取消插入到數據庫中的新插入)。
如何配置我的作業在不同的步驟中只使用一個事務?
我正在使用Spring批處理執行一個批處理,它在數據庫中創建一些對象,從這些對象創建一個文件,然後將該文件發送到FTP服務器。因此,我有兩個步驟:一個從DB讀取conf,插入到數據庫並創建文件;第二個將文件發送到FTP服務器。Spring批處理 - 整個作業中的一個事務
問題是當FTP服務器出現問題時,我無法回滾事務(取消插入到數據庫中的新插入)。
如何配置我的作業在不同的步驟中只使用一個事務?
由於spring-batch的事務性質,這是一個壞主意。
恕我直言,一個簡單的解決方案應該是用工作開始時生成的令牌標記第1步中保存的數據,並且如果您的FTP上傳失敗,請移至清除步驟以刪除帶有令牌的所有數據。
同意bellabax:這是一個壞主意。
但我不會做第三次清理步驟,因爲此步驟也可能失敗,讓事務不回滾。
您可以用一個標誌來標記插入的條目,該標誌指示條目尚未發送到FTP。 第三步將切換標誌以指示這些條目已發送到FTP。
然後你只需要一個cron /批號/ 4清潔步驟/不管將刪除沒有被髮送到FTP
感謝所有條目,這是我最後的解決方案:標記新創建的對象作爲「尚未發送「標誌並在」發送到FTP「步驟成功時進行更改。另外,我會嘗試使用代碼片段從失敗的步驟重新啓動批處理。 – Zava