编程式事务管理
2015-07-23 14:58
281 查看
事务的3个重要对象:TransactionDefinition、PlatformTransactionManager、TransactionStatus
所谓的事务管理即是:“按照给定的事务规则来执行提交或回滚操作”。
TransactionDefinition:指定了事务的管理规则
PlatformTransactionManager:定义了提交和回滚操作
TransactionStatus:表示一个新的或者运行着的事务。可查询事务状态。
编程式事务管理需要显示的调用beginTransaction()、commit()、rollback()等事务管理相关的方法。
基于API的编程式事务管理:
基于TransationTemplate的编程式事务管理
TransactionTemplate 的 execute() 方法有一个 TransactionCallback 类型的参数,该接口中定义了一个 doInTransaction() 方法,通常我们以匿名内部类的方式实现 TransactionCallback 接口,并在其 doInTransaction() 方法中书写业务逻辑代码。该方法采用了默认的事务管理规则。
doInTransaction() 方法有一个TransactionStatus 类型的参数,我们可以在方法的任何位置调用该参数的setRollbackOnly() 方法将事务标识为回滚的,以执行事务回滚。
根据默认规则,如果在执行回调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly() 方法,则回滚事务;如果事务执行完成或者抛出了 checked 类型的异常,则提交事务。
所谓的事务管理即是:“按照给定的事务规则来执行提交或回滚操作”。
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 类型的异常,则提交事务。
相关文章推荐
- C++之带有默认参数值的构造函数
- QT5.3.1移植(上)
- MyEclipse或者Eclipse控制台(Console)中的中文输出乱码问题
- [ASP.NET MVC 小牛之路]16 - Model 验证
- Java中的继承与组合
- 将一个正整数转换成2进制并输出
- QT添加图标
- C++异常处理学习记录
- [ASP.NET MVC 小牛之路]15 - Model Binding
- python字符串连接
- ASP.NET中文件上传与下载
- Qt5 操作字符串
- Matlab实现均匀量化
- [ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
- C++中内置变量的初始化
- [ASP.NET MVC 小牛之路]13 - Helper Method
- 【转】Python的异常处理机制
- 【WPF编程】XAML
- PHP框架Yii系列教程(一):入门实例
- 在springMVC中使用AOP拦截controller