spring + myBatis 常見錯誤:注解事務不回滾


最近項目在用springMVC+spring+myBatis框架,在配置事務的時候發現一個事務不能回滾的問題。

剛開始配置如下:springMVC.xml配置內容:

spring.xml配置內容

從上面兩個配置文件看出,開始的時候我把Service配置在springMVC中的。但是,事務注解我配置在了spring中。這樣就會出現問題了。因為spring的容器(applicationContext)和springMVC的(applicationContext)是不同的。

spring容器加載得時候,優先加載ServletContextListener(對應spring.xml)產生的父容器,而springMVC(對應springMVC.xml)產生的是子容器。子容器Controller進行掃描裝配時裝配的@Service注解的實例是沒有經過事務加強處理,

即沒有事務處理能力的Service。而父容器進行初始化的Service是保證事務的增強處理能力的。如果不在子容器中將Service除去掉,此時得到的將是原樣的無事務處理能力的Service。

所以,我們應把掃描Service的工作放在spring.xml中。讓Service和事務注解存在於同一個容器中,這樣配置的事務注解就能起作用了。也就是說把<context:component-scan base-package="com.services" />這個配置從

springMVC.xml中移到spring.xml的配置中。事務不回滾的問題就能解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM