2017-08-15 58 views
1

我有一個多線程的應用程序,其中解析文件並插入數據庫 - 我有一個數據庫連接池寫入數據庫 - 我需要添加事務控制通過解析/寫入整個操作即如果在解析/ db-insert操作期間出現任何錯誤,我想回滾整個操作,其中我的部分數據庫寫入需要回滾 - 是否有任何方法可以執行此操作?通過連接池的事務控制

回答

0

您需要將連接從池中取出,在其上啓動數據庫事務,並在事務處理期間將其保留在池外。一旦完成(提交或回滾)事務,您只會將其返回給池。

這顯然意味着您不能並行運行更多的事務,而不是您的池中有連接。如果你不能接受這個限制,你將不得不設計你自己的解決方案,它不依賴於數據庫事務(例如,使用「stage」表來接受帶有一些唯一標識符的數據,然後立即將它移動到主存儲中,加上刪除陳舊數據的任務)。

我建議您閱讀Spring's transaction manager尋求靈感。

0

如果我理解正確,你有一個應用程序將文件分成幾個部分,每個部分由不同的線程進行分析,每個部分都使用自己的連接。

如果您可以使用XA事務,我認爲事務管理器可以幫助您。每個連接都會形成一個單獨的事務分支,因此每個線程都可以在單獨的事務參與者上工作。最後,2PC將確保全部承諾或回滾。