XML配置聲明式事務:(基本不用)
需要spring-jdbc 、spring-tx依賴和tx限制,限制可以直接用spring-jdbc ,其中包含spring-tx
聲明式事務(xml):為的是無論spring內建什麼dao架構,我們不用寫事務代碼
1.開始将事務管理者配置到核心容器
2.注入資料源
3.配置事務
3.1 tx配置事務規則
事務規則:
name就是方法名 事務規則作用的範圍
rollback-for 遇到什麼就復原 預設是異常java.lang.Exception 也可以其他異常
no-rollback-for 遇到什麼不復原 也是一種異常 利于空指針異常時不復原
timeout 表示事務逾時時間 預設為-1 永不逾時
read-only 是否是隻讀事務 預設為false 一般用于查詢
isolation 事務隔離級别 一般也是預設
read-uncommitted 讀取未送出 髒讀
read-committed 讀取已經送出 (Oracle預設隔離級别)不可重複讀
repeatable-read 可重複讀 (Mysql預設隔離級别) 幻讀
Serializable 串行化 (最進階)
3.2 aop設定切入點
3.3 aop關聯規則和切入點
xml案例:
開始将事務管理者配置到核心容器 并注入資料源
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="datasource"></property>
</bean>
配置事務規則:
<tx:advice id="ad1" transaction-manager="transactionManager">
<tx:attributes>
<!--事務管理作用到的方法-->
<tx:method name="transfer" read-only="true" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
AOP配置切入點以及切入點和事務規則的關聯
<aop:config>
<!--切入點 用于整個類 不具體到某個方法 方法被事務規則圈定了 此時方法用*表示 代表該類所有方法-->
<aop:pointcut id="pt1" expression="execution(* com.ls.service.AccountServiceImpl.*(..))"></aop:pointcut>
<!--切入點和規則關聯-->
<aop:advisor advice-ref="ad1" pointcut-ref="pt1"></aop:advisor>
</aop:config>
注解配置聲明式事務:
聲明式事務(xml):為的是無論spring內建什麼dao架構,我們不用寫事務代碼
1.開始将事務管理者配置到核心容器
2.注入資料源
3.開啟注解驅動
4.在方法上添加Transactional注解 屬性也和配置檔案一樣
案例:
開始将事務管理者配置到核心容器 并注入資料源
<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>
</beans>