一、事務的基本原理

Spring事務的本質其實就是數(shù)據(jù)庫對事務的支持,沒有數(shù)據(jù)庫的事務支持,spring是無法提供事務功能的。對于純JDBC操作數(shù)據(jù)庫,想要用到事務,可以按照以下步驟進行:

  1. 獲取連接 Connection con = DriverManager.getConnection()

  2. 開啟事務con.setAutoCommit(true/false);

  3. 執(zhí)行CRUD

  4. 提交事務/回滾事務 con.commit() / con.rollback();

  5. 關閉連接 conn.close();

使用Spring的事務管理功能后,我們可以不再寫步驟 2 和 4 的代碼,而是由Spirng 自動完成。?那么Spring是如何在我們書寫的 CRUD 之前和之后開啟事務和關閉事務的呢?解決這個問題,也就可以從整體上理解Spring的事務管理實現(xiàn)原理了。下面簡單地介紹下,注解方式為例子

  1. 配置文件開啟注解驅動,在相關的類和方法上通過注解@Transactional標識。

  2. spring 在啟動的時候會去解析生成相關的bean,這時候會查看擁有相關注解的類和方法,并且為這些類和方法生成代理,并根據(jù)@Transaction的相關參數(shù)進行相關配置注入,這樣就在代理中為我們把相關的事務處理掉了(開啟正常提交事務,異?;貪L事務)。

  3. 真正的數(shù)據(jù)庫層的事務提交和回滾是通過binlog或者redo log實現(xiàn)的。

二、Spring 事務的傳播屬性

所謂spring事務的傳播屬性,就是定義在存在多個事務同時存在的時候,spring應該如何處理這些事務的行為。這些屬性在TransactionDefinition中定義,具體常量的解釋見下表:

網(wǎng)友評論

<form id="ykrfy"><i id="ykrfy"><ol id="ykrfy"></ol></i></form>