1. 程式人生 > >Spring事物配置檔案

Spring事物配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop 
                           http://www.springframework.org/schema/aop/spring-aop.xsd
                           http://www.springframework.org/schema/tx
                           http://www.springframework.org/schema/tx/spring-tx.xsd
                           
">
	<!-- 將事務管理器作為一個bean配置到spring的容器的 -->
	<!-- 使用的是jdbc所以使用DataSourceTransactionManager -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 事務管理器需要注入一個dataSource -->
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 第二步:定義通知,通知中要處理的就是事務 -->
	<!-- 配置事務的隔離性和傳播特性 -->
	<!-- 相當於一個AOP的切面 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- 配置事務的屬性定義 -->
		<tx:attributes>
			<!-- 配置具體的方法的事務屬性 
				isolation//事務的隔離級別,預設是按資料庫的隔離級別來 
				propagation//事務的傳播行為,預設是同一個事務 
				timeout="-1":事務的超時時間,預設值使用資料庫的超時時間。 
				read-only="false":事務是否只讀,預設可讀寫。 
				rollback-for:遇到哪些異常就回滾,其他的都不回滾 
				no-rollback-for:遇到哪些異常不回滾,其他的都回滾。和上面互斥的 -->
			<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED"
				timeout="-1" read-only="false" />

			<!-- 支援萬用字元 要求service中 方法名字必須符合下面的規則 -->
			<tx:method name="save*" />
			<tx:method name="update*" />
			<tx:method name="delete*" />
			<tx:method name="insert*" />
			<tx:method name="find*" read-only="true" />
			<tx:method name="query*" read-only="true" />
			<tx:method name="select*" read-only="true" />
			<tx:method name="get*" read-only="true" />
		</tx:attributes>
	</tx:advice>

	<!-- 第三步:配置切入點,讓通知關聯切入點,即事務控制業務層的方法 -->
	<aop:config>
		<!-- 切入點 -->
		<aop:pointcut expression="bean(*Service)" id="txPointcut"/>
		<!-- 切面 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
	</aop:config>
	
</beans>