2011-08-16 36 views
34

我有一些遺留代碼,我現在試圖在Spring下重用。這段代碼深深地嵌套在其他代碼中,所以重新設計並不實際,並且在許多情況下被調用,其中只有一些是通過Spring。我想要做的是使用Spring事務,如果已經開始的話;否則,繼續使用現有的(遺留)數據庫連接機制。我們的第一個想法是讓我們的遺留類成爲一個bean,並使用注入的TransactionPlatformManager,但似乎沒有任何與我們的情況密切相關的方法。一些研究表明,Spring有一個名爲TransactionSynchronizationManager的類,它有一個靜態方法isActualTransactionActive()。我的測試表明,這種方法是檢測是否Spring事務處於活動狀態的可靠方法:有沒有更好的方法來檢測Spring數據庫事務是否比使用TransactionSynchronizationManager.isActualTransactionActive()更有效?

  • 當通過Spring服務稱爲無@Transactional註釋,則返回false
  • 當通過Spring服務調用@Transactional,它返回真正
  • 在我的傳統方法中調用現有的方式,則返回false

我的問題:是否有檢測,如果交易活躍更好的辦法?

回答

37

沒有比TransactionSynchronizationManager.isActualTransactionActive()更好的方法。這是Spring用來處理交易的實用方法。儘管在你的代碼中使用它是不可取的,但對於一些特定情況你應該 - 這就是爲什麼它是公開的。

另一種方法可能是使用實體管理器/會話/連接並檢查是否存在現有事務,但我更喜歡同步管理器。

+0

謝謝!那很完美。 – fool4jesus

相關問題