複習之spring基礎(三)——Spring 的事務管理—配置AOP事務(XML和註解方式)
阿新 • • 發佈:2018-12-15
事務
事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗
事務的特性
- 原子性 :強調事務的不可分割.
- 一致性 :事務的執行的前後資料的完整性保持一致.
- 隔離性 :一個事務執行的過程中,不應該受到其他事務的干擾.
- 永續性 :事務一旦結束,資料就持久到資料庫.
解決讀問題:設定事務隔離級別
未提交讀 :髒讀,不可重複讀,虛讀都有可能發生 已提交讀 :避免髒讀。但是不可重複讀和虛讀有可能發生 可重複讀 :避免髒讀和不可重複讀.但是虛讀有可能發生. 序列化的 :避免以上所有讀問題.
Mysql 預設:可重複讀 Oracle 預設:已提交讀
事務的傳播行為
PROPAGION_XXX :事務的傳播行為 , 保證同一個事務中 PROPAGATION_REQUIRED 支援當前事務,如果不存在 就新建一個(預設) PROPAGATION_SUPPORTS 支援當前事務,如果不存在,就不使用事務 PROPAGATION_MANDATORY 支援當前事務,如果不存在,丟擲異常
保證沒有在同一個事務中 PROPAGATION_REQUIRES_NEW 如果有事務存在,掛起當前事務,建立一個新的事務 PROPAGATION_NOT_SUPPORTED 以非事務方式執行,如果有事務存在,掛起當前事務 PROPAGATION_NEVER 以非事務方式執行,如果有事務存在,丟擲異常 PROPAGATION_NESTED 如果當前事務存在,則巢狀事務執行
XML 方式配置AOP事務
配置事務的通知和aop 事務
<!-- 配置事務的增強 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- isolation="DEFAULT" 隔離級別 propagation="REQUIRED" 傳播行為 read-only="false" 只讀 timeout="-1" 過期時間 rollback-for="" -Exception no-rollback-for="" +Exception --> <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ" read-only="false" /> <tx:method name="find*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* top.maniy.service..*ServiceImpl.*(..)" id="pointcut1"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>
註解方式
配置事務管理器
<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
開啟事務管理的註解
<!-- 開啟註解事務管理 --> <tx:annotation-driven transaction-manager="transactionManager"/>
在使用事務的類上新增一個註解
@Transactional
public class OrderDaoImpl implements OrderDao {