Spring事務管理器的配置和使用

                                  Spring事務管理器的配置和使用

1.爲什麼要配置spring事務管理器。

在將spring和hibernate結合之後,我們需要將事務管理交給spring管理。以保證數據的安全型,避免髒數據的出現。通過spring注入來完成此功能。

步驟1:在spring的配置文件中配置事務管理器

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
</bean>
步驟2:配置完事務管理器,需要給事務管理器加上各種參數。

<!-- 哪些方法需要Spring開啓事務
		transaction-manager="transactionManager":指定事務管理器
		通知類型:Spring幫我們寫好
	 -->
	<tx:advice transaction-manager="transactionManager" id="txAdvice">
		<tx:attributes>
			<!--
				REQUIRED:需要開啓事務 
				rollback-for:拋出哪些異常需要Spring回滾
				name="save*":以save開頭的要開啓事務
				rollback-for:拋出哪類異常(以及子類)的時候,Spring事務回滾,默認是RunTimeException
			 -->
			<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
			<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
			<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
			<!--
				其它方法,只能讀 
			 -->
			<tx:method name="*" read-only="true"/>
		</tx:attributes>
	</tx:advice>
	
步驟3:指定那些類執行事務管理器,,可以將事務管理器也理解成一種通知類型。(通知類型可以理解成就是攔截器,配置及使用參照)一般來說都是放在Service層,因爲放在Dao層來說,Dao層每次都是執行一條sql成功與否對其他的sql沒影響。但是放到Service層當一條sql語句出現錯誤時,事務回滾

<!-- 配置AOP,
		目的:哪些類裏面的哪些方法執行事務管理器
	 -->
	 <aop:config>
	 	<!-- 定義哪些類執行事務管理器
	 	推薦放到實現類上面(Service)
	 	 -->
	 	<aop:pointcut expression="execution(* com.bjsxt.*.service.impl.*.*(..))" id="pointcut"/>
	 	<!-- 將事務管理器和橫切面(pointcut)關聯起來 -->
	 	<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
	 </aop:config>
以上三步配置完成之後,運行項目你會發現tomcat會給你報
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined 
in file [F:\workspace\ssh_demo\build\classes\spring\applicationContext_common.xml]: Invocation of init method failed; nested exception is 
org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]
這段話的意思是說transactionManager我們配置的那個事務管理器找不到DataSource,我們需要將數據源也交給事務管理器

步驟4:配置數據源

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 驅動 -->
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<!-- url -->
		<property name="url" value="jdbc:mysql://localhost:3306/ssh"/>
		<!-- 用戶名 -->
		<property name="username" value="root"/>
		<!-- 密碼 -->
		<property name="password" value="199464"/>
	</bean>
開啓自動裝備之後,開啓自動裝備transactionManager中的Datasource屬性會被自動賦值。
完成以上操作,再執行就可以執行數據庫的的增刪改的錯的了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章