2017-04-05 37 views
1

有問題的項目使用Spring 4,Java 7,並堅持Oracle和PostgreSQL。在同一進程中支持多個Spring @Transactional回滾?

我正在寫一個服務的集成測試,它將數據保存到兩個數據庫。對於集成測試,我想讓這兩個事務自動回滾。我知道如果不使用Java 8,我不能使用「重複」註釋,因爲我會遇到編譯錯誤。如果我在類級別放置一個註釋,並且在方法級別放置另一個註釋,我可以編譯得很好。但是,看起來列出的較高註釋不會回滾。爲了澄清,如果我在類或方法級聲明@Transactional註釋(Oracle或PostgreSQL)作爲獨立註釋,那麼這個回滾完美地起作用。但是,如果我在類級別實現一個註釋,並且在方法級別實現另一個註釋,則回滾將僅適用於方法級別,而不適用於類級別。

我懷疑多個@Transactional註釋會工作得很好,只要進程只試圖一次回滾一個。例如:一種方法使用Oracle Transaction,另一種方法使用PostgreSQL Transaction。

有什麼想法?

回答

4

好的,我想出瞭如何去做。有一個單獨的SpringFramework項目「spring-data-commons」,它有一個名爲ChainedTransactionManager的類。我有線了一個bean如下:

<bean id="chainedTransactionManager" 
      class="org.springframework.data.transaction.ChainedTransactionManager"> 
     <constructor-arg> 
      <list> 
       <ref bean="postgresqlTransactionManager"/> 
       <ref bean="oracleTransactionManager"/> 
      </list> 
     </constructor-arg> 
    </bean> 

然後我用了chainedTransactionManager我的註釋

@Transactional(transactionManager = "chainedTransactionManager") 

兩個交易進行此更改後如預期回滾。

相關問題