您的位置:首页 > 编程语言

编程式事务管理

2015-07-23 14:58 281 查看
事务的3个重要对象:TransactionDefinition、PlatformTransactionManager、TransactionStatus

所谓的事务管理即是:“按照给定的事务规则来执行提交或回滚操作”。

TransactionDefinition:指定了事务的管理规则

PlatformTransactionManager:定义了提交和回滚操作

TransactionStatus:表示一个新的或者运行着的事务。可查询事务状态。

编程式事务管理需要显示的调用beginTransaction()、commit()、rollback()等事务管理相关的方法。

基于API的编程式事务管理:

<span style="font-size:18px;">@Resource
private UserDao userDao;
	
private TransactionDefinition txDefinition;
private PlatformTransactionManager txManager;
	
public boolean updateUser(User user){
	TransactionStatus txStatus = txManager.getTransaction(txDefinition);//<span style="font-size:14px;">获取当前事物或新建一个事务</span>
	boolean result = false;
	try {
		result = userDao.updateUser(user);
		txManager.commit(txStatus);      //提交
	} catch (Exception e) {
		result = false;
		txManager.rollback(txStatus);	//回滚
		System.out.println("Transfer Error!");
	}
	return result;
}</span>
XML配置如下:

<bean id="Service" class="com.danger.superclub.service">
	<property name="userDao" ref="userDao"/>
	<property name="txManager" ref="transactionManager"/>
	<property name="txDefinition">
		<bean class="org.springframework.transaction.support.DefaultTransactionDefinition">
			<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
		</bean>
	</property>
</bean>


基于TransationTemplate的编程式事务管理

@Resource
private UserDao userDao;	
private TransactionTemplate  transactionTemplate;
		
public boolean updateUser(final User user){
	return (Boolean) transactionTemplate.execute(new TransactionCallback(){
		public Object doInTransaction(TransactionStatus status) {
		Object result;
		try {
			result = userDao.updateUser(user);
		} catch (Exception e) {
			status.setRollbackOnly();
			result = false;
			System.out.println("Transfer Error!");
		}
		return result;
		}
	});
}
XML配置如下:

<span style="font-size:14px;">//配置事务模版</span>
<bean id="transactionTemplate"
		class="org.springframework.transaction.support.TransactionTemplate">
	<property name="transactionManager">
		<ref bean="transactionManager" />
	</property>
</bean>
<bean id="userService" class="com.danger.superclub.service">
	<property name="userDao" ref="userDao"/>
	<property name="transactionTemplate" ref="transactionTemplate"/>
</bean>


TransactionTemplate 的 execute() 方法有一个 TransactionCallback 类型的参数,该接口中定义了一个 doInTransaction() 方法,通常我们以匿名内部类的方式实现 TransactionCallback 接口,并在其 doInTransaction() 方法中书写业务逻辑代码。该方法采用了默认的事务管理规则。

doInTransaction() 方法有一个TransactionStatus 类型的参数,我们可以在方法的任何位置调用该参数的setRollbackOnly() 方法将事务标识为回滚的,以执行事务回滚。

根据默认规则,如果在执行回调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly() 方法,则回滚事务;如果事务执行完成或者抛出了 checked 类型的异常,则提交事务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: