springmvc+mybatis 事務回滾

spring的事務管理要在xml文件中進行配置,包括

事務管理器:

<!-- 給數據源配置事務管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"></property>
    </bean>

開啓事務:

<!-- 啓動配置好的事務管理 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

然後在想要實現事務管理的方法上面添加 @Transactional 註解即可,添加註解的方法要是public方法,也可以添加在類上面,表示類中所有方法都實現事務管理,

當方法拋出異常時spring會自動回滾事務,常用

throw new RuntimeException();

當需要方法正常返回時,也可以手動回滾

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

事務管理一般放在service層

 

SpringMVC+MyBatis事務不回滾問題的解決辦法

Spring容器優先加載由ServletContextListener(對應root-context.xml)產生的父容器,而SpringMVC(對應mvc_dispatcher_servlet.xml)產生的是子容器。子容器Controller進行掃描裝配時裝配的@Service註解的實例是沒有經過事務加強處理,即沒有事務處理能力的Service,而父容器進行初始化的Service是保證事務的增強處理能力的。如果不在子容器中將Service exclude掉,此時得到的將是原樣的無事務處理能力的Service,因爲在多上下文的情況下,

如果同一個bean被定義兩次,後面一個優先。

注意:一個bean被定義兩次,後面一個優先。這一點很重要,之前我就遇到這個問題,事務管理始終不好使。

 事務管理也可以放在controller層,只要將啓動事務的代碼從spring-bean.xml移到spring-mvc.xml中就可以了。

https://blog.csdn.net/java_2017_csdn/article/details/77882162

發佈了25 篇原創文章 · 獲贊 9 · 訪問量 7272
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章