现在的位置: 首页 > 综合 > 正文

spring_事务处理

2017年12月27日 ⁄ 综合 ⁄ 共 2565字 ⁄ 字号 评论关闭

链接:http://dylanxu.iteye.com/blog/1308790

事务处理的几种方式-链接:http://blog.csdn.net/wm5920/article/details/8174619 (待研究)

spring_声明式事务处理

---方式一:采用@Transactional  Annotation实现声明式事物管理

@Transactional可以修饰SpringBean类,也可以修饰Bean类中的某个方法,代表不同的事务设置方式。

步骤1:采用@Transactional修饰需要添加事务的类或方法

public class NewsDaoImpl implements NewsDao
{
	...
	@Transactional(propagation=Propagation.REQUIRED)
	public void insert(String title, String content)
	{
		...
	}
}

步骤2:配置让Spring能根据Annotation来配置事务代理

	<!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 -->
	<!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现-->
	<bean id="transactionManager" 
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 配置DataSourceTransactionManager时需要依注入DataSource的引用 -->
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<!-- 根据Annotation来生成事务代理 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

---方式二:采用XML配置方式实现事务增强处理

<?xml version="1.0" encoding="GBK"?>
<!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd


http://www.springframework.org/schema/tx


http://www.springframework.org/schema/tx/spring-tx-3.0.xsd


http://www.springframework.org/schema/aop

	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	<!-- 定义数据源Bean,使用C3P0数据源实现 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		...
	</bean>
	
	<!-- 配置一个业务逻辑Bean -->
	<bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl">
		<property name="ds" ref="dataSource"/>
	</bean>
	
	<!-- 配置JDBC数据源的局部事务管理器,使用DataSourceTransactionManager 类 -->
	<!-- 该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现-->
	<bean id="transactionManager" 
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<!-- 配置事务增强处理,指定事务管理器 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 所有以'get'开头的方法是read-only的 -->
			<tx:method name="get*" read-only="true"/>
			<!-- 其他方法使用默认的事务设置 -->
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	
	<!-- AOP配置的元素 -->
	<aop:config>
		<!-- 配置一个切入点,匹配org.crazyit.app.dao.impl包下所有以Impl结尾的类里、所有方法的执行 -->
		<aop:pointcut id="myPointcut" expression="execution(* org.crazyit.app.dao.impl.*Impl.*(..))"/>
		<!-- 指定在txAdvice切入点应用txAdvice事务增强处理 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
	</aop:config>
</beans>

注:摘自轻量级JavaEE企业应用实战第三版

【上篇】
【下篇】

抱歉!评论已关闭.