1. 原理
A. Spring事務的本質就是數據庫對事務的支持,沒有數據庫事務的支持,Spring是無法提供事務功能的;
B. 純JDBC操作步驟
獲取連接:Connection conn = DriverManager.getConnection();
開啟事務:conn.setAutoCommit(true/false);
執行CRUD
提交或回滾事務:conn.commit() / conn.rollback();
關閉連接:conn.close();
C. Spring自動完成開啟事務或提交、回滾事務這兩步,只需要在配置類加上開啟@EnableTransactionManagement注解驅動,然后在相關類和方法上加上@Transactional注解;
D. 真正的數據庫層的事務提交和回滾是通過binlog和redolog實現的。
2. Spring中的隔離級別
A. default:這 PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別;
B. read uncommitted:這是事務最低的隔離級別,它充許另外一個事務可以看到這個事務未提交的數據,這種隔離級別會產生臟讀,不可重復讀和幻讀;
C. read committed:保證一個事務修改的數據提交后才能被另外一個事務讀取,另外一個事務不能讀取該事務未提交的數據,這種隔離級別會產生不可重復讀和幻讀;
D. repeatable read:這種事務隔離級別可以防止臟讀,不可重復讀,但是可能出現幻讀;
E. serializable:這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。
3. 事務的傳播特性
A. required:支持當前事務,如果當前沒有事務,就新建一個事務,這是Spring默認的事務的傳播;
B. supports:支持當前事務,如果當前沒有事務,就以非事務方式執行;
C. mandatory:支持當前事務,如果當前沒有事務,就拋出異常;
D. requireds new:新建事務,如果當前存在事務,把當前事務掛起。新建的事務將和被掛起的事務沒有任何關系,是兩個獨立的事務,外層事務失敗回滾之后,不能回滾內層事務執行的結果,內層事務失敗拋出異常,外層事務捕獲,也可以不處理回滾操作;
E. not supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起;
F. never:以非事務方式執行,如果當前存在事務,則拋出異常;
G. nested:如果一個活動的事務存在,則運行在一個嵌套的事務中。如果沒有活動事務,則按REQUIRED屬性執行。它使用了一個單獨的事務,這個事務擁有多個可以回滾的保存點。內部事務的回滾不會對外部事務造成影響。它只對DataSourceTransactionManager事務管理器起效。