Spring事務注解@Transactional失效的問題


在項目中發現事務失效,使用@Transactional注解標注的Service業務層實現類方法全部不能回滾事務了,最終發現使用因為Spring與shiro進行整合之后導致的問題,將所有的Service層實現類都添加如下注解

@Scope(proxyMode= ScopedProxyMode.TARGET_CLASS)

將代理方式換成CGLib的代理方式之后得以解決,最終不明原因,如有看到這篇博客並知道答案的朋友請留言告知

如果事務不能回滾,也需要考慮如下幾點:

  • 表得存儲引擎為MyISAM是沒有事務的,需要使用InnoDB
  • 加事務的方法中手動try...catch住了異常,只有將異常拋出來(無論是主動還是被動)事務才能回滾
  • Spring事務默認回滾的是RunTimeException運行時異常,如果是check異常是不會回滾的,可以指定回滾異常,如下
@Transactional(rollbackFor = Exception.class)

只要出現異常就進行回滾


免責聲明!

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



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