2012-02-20 330 views
0

我想用Spring 3.0基於註釋的交易來處理我的服務層。我正在配置春季交易支持,如下所示:春季:交易不回滾

我爲我的交易使用了DataSourceTransactionManager

<bean id="summaryDailyTXManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 

    <property name="dataSource" ref="summaryDailyDataSource"/> 

</bean> 

我配置基於註解的支持如下:

<tx:annotation-driven transaction-manager="summaryDailyTXManager" proxy-target-class="true" /> 

這一點,我用我的事務性功能的以下注釋後:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class }) 
public void doSomething() { 
// my code 
} 

我的理解是這樣的,如果有是doSomething函數的任何異常,事務將回滾。但它並沒有回滾。請指導我如果我做錯了什麼或者我錯過了什麼。

謝謝。

問候 吉拉尼

+0

向我們展示'doSomething'。 – soulcheck 2012-02-20 11:10:42

+0

請向我們展示獲取對包含此方法的對象的引用以及調用此方法的代碼。 – 2012-02-20 11:12:35

+0

你的數據源自動提交是否被禁用? – phlogratos 2012-02-20 11:12:38

回答

4

什麼是你的數據庫?有時它有一個數據庫問題。

MySQL與MyISAM表的實例沒有交易。 無論您如何配置Spring或本地JDBC而沒有使用Spring或使用JTA或Hibernate,都無法獲得ROLLBACK。

如果我面臨類似的問題,我會通過排除Spring來隔離問題。

創建一個本地非彈簧jdbc方法。

得到

一套自動提交虛假

插入一條記錄

插入另一個紀錄

回滾

關閉連接的連接

手動如果檢查連接日e記錄已被插入

+1

這正是我的問題。讓我瘋狂地想弄清楚爲什麼我的交易沒有回滾。感謝你的回答。 – hese 2012-03-30 21:24:35

0

因爲只有當runtimeException被默認拋出時,spring纔會回退。