Spring注解之@Transactional對於事務異常的處理


概述

  • @Transactional 是聲明式事務管理編程中使用的注解

  • 添加位置:接口實現類或接口實現方法上,而不是接口類中

  • 訪問權限:public 的方法才起作用

  • @Transactional實現原理:

    1)事務開始時,通過AOP機制,生成一個代理connection對象,並將其放入DataSource實例的某個與DataSourceTransactionManager相關的某處容器中。在接下來的整個事務中,客戶代碼都應該使用該connection連接數據庫,執行所有數據庫命令[不使用該connection連接數據庫執行的數據庫命令,在本事務回滾的時候得不到回滾](物理連接connection邏輯上新建一個會話session;DataSource與TransactionManager配置相同的數據源)

    2)事務結束時,回滾在第1步驟中得到的代理connection對象上執行的數據庫命令,然后關閉該代理connection對象(事務結束后,回滾操作不會對已執行完畢的SQL操作命令起作用)

  • spring對於事務異常的處理

   unchecked   運行期Exception   spring默認會進行事務回滾       比如:RuntimeException

   checked       用戶Exception       spring默認不會進行事務回滾   比如:Exception

     如何改變spring的這種默認事務行為?可以通過在方法上

     添加@Transactional(noRollbackFor=RuntimeException.class)讓spring對於RuntimeException不回滾事務

     添加@Transactional(RollbackFor=Exception.class)讓spring對於Exception進行事務的回滾

     在項目中,@Transactional(rollbackFor=Exception.class),如果類加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數據庫里面的數據也會回滾


免責聲明!

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



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