天天看點

聲明式事務(XML和注解)

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>