2023-01-18 一、Spring聲明式事務管理 1、事務四大特征(ACID) (1)原子性 (2)一致性 (3)隔離性 (4)持久性 2、事務三種行為 (1)開啟事務:connection.setAutoCommit(False) (2)提交事務:connection.commit() (3) ...
2023-01-18
一、Spring聲明式事務管理
1、事務四大特征(ACID)
(1)原子性
(2)一致性
(3)隔離性
(4)持久性
2、事務三種行為
(1)開啟事務:connection.setAutoCommit(False)
(2)提交事務:connection.commit()
(3)回滾事務:connection.rollback()
二、Spring中支持事務管理
1、編程式事務管理
(1)獲取資料庫連接Connection對象
(2)取消事務的自動提交(開啟事務)
(3)執行操作
(4)正常完成操作時手動提交事務
(5)執行失敗時回滾事務
(6)關閉相關資源
2、聲明式事務管理(使用AOP管理事務)
先橫向提取(事務管理代碼),再動態織入
三、使用聲明式事務管理
註:如果不使用事務管理代碼,會出現以下情況:
同一個業務中,會出現局部成功及局部失敗的現象(不正常)。
1、基本使用步驟
(1)添加支持jar包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.10</version> </dependency>
(2)編寫配置文件
①配置事務管理器
②開啟事務註解支持
<!-- 配置事務管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 開啟事務註解支持--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
(3)在需要事務管理的業務方法上添加註解@Transational
註:添加聲明式事務管理之後,獲取是代理對象,代理對象不能轉換為目標對象(實現類)
四、Spring聲明式事務管理屬性
1、事務傳播行為(Propagation)
當事務方法被另一個事務方法調用時,必須指定事務應該如何傳播
如:執行事務方法method()1(事務x)之後,調用事務方法method2()(事務y),此時需要設置method()2方法的事務傳播行為。
(1)事務的傳播行為
①REQUIRED:如果有事務在運行,當前的方法就在這個事務內運行;否則就啟動一個新的事務,併在自己的事務內運行
②REQUIRED_NEW:當前的方法必須啟動新事務,併在自己的事務內運行;如果有事務正在運行,應該將它掛起。