Spring 中的TransactionTemplate

转载 2015年11月18日 14:47:05
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。 
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。 
• Object dolnTransaction(TransactionStatus status) 。 
该方法的方法体就是事务的执行体。 
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法: 
• void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。 


example: 

transactionTemplate.execute(new TransactionCallback() { 
public Object doInTransaction(TransactionStatus status) { 
try{ 
    } 
catch (Exception e) { 

  finally { 

status.setRollbackOnly(); 
           ) 
); 





两种Spring事务管理方式:编程式、声明式。 

Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。 

1.TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。代码片段: 

Object result = tt.execute(new TransactionCallback()...{  
public Object doTransaction(TransactionStatus status)...{  
updateOperation();  
return resultOfUpdateOperation();  
}  
}); 
使用TransactionCallback()可以返回一个值。如果使用TransactionCallbackWithoutResult则没有返回值。 

2.也可以使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用给你的bean传递一个你使用的 PlatformTransaction对象。然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。如下片段: 

DefaultTransactionDefinition def= new DefaultTransactionDefinition(); //new 一个事务              def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); //                                                    初始化事务,参数定义事务的传播类型; TransactionStatus status =                                   transactionManager.getTransaction(def); //获得事务状态 try...{ ……………..                                 transactionManager.commit(status); //提交事务; }catch(…..)...{                                                   transactionManager.rollback(status); //回滚事务; }  
Spring也提供声明式事务管理。这是通过AOP实现的。大多数Spring用户选择声明式事务管理,这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。 

1)通常通过TransactionProxyFactoryBean设置Spring事务代理。需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Javabean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。事务属性含有事务定义。例如: 

<bean id="transactionService"class="org.springframework.                    transaction.interceptor.TransactionProxyFactoryBean"> 
<property name="transactionManager"> 
<ref   local="transactionManager"/> 
property> 
<property  name="target"> 
<ref  local="transactionServiceControl"/> 
property> 
<property  name="transactionAttributes"> 
<props> 
<prop key=”insert*”>PROPAGATION_REQUIRED,-MyCheckedExceptionprop> 
<prop key=”update*”>PROPAGATION_REQUIREDprop> 
<prop key=”*”>PROPAGATION_REQUIRED,readOnlyprop> 
props> 
property> 
bean> 
事务代理会实现目标对象的接口:这里是属性名是target的引用。id是transactionServiceControl。(使用CGLIB也可以实现具体类的代理。只要设置proxyTargetClass属性为true即可。如果目标对象没有实现任何接口,这将自动设置该属性为true。通常,我们希望面向接口编程。)使用proxyInterfaces属性来限定事务代理来代理指定接口也是可以。 也可以通过从org.springframework.aop.framework.ProxyConfig继承或所有AOP代理工厂共享的属性来定制 TransactionProxyFactoryBean行为。

Spring中编程式事务处理(使用TransactionTemplate)之一

Spring的编程式事务处理,需要使用Hibernate事务回调接口,事务回调接口可以管理Hibernate的事务:  TransactionCallbackWithoutResult —— 执...

Spring中TransactionTemplate 简单灵活的事务配置及使用

在一般的交易类程序中会频繁的使用事务来约束重要或关键的动作,已保证交易行为的整体性和一致性。 下例中是在Spring框架下中使用JDBC连接数据库的事务示例。 1.配置文件内容  数据源、事务的...

Spring TransactionTemplate + Mysql事务理解

Mysql事务使用 autocommit说明 事务使用 案例 JDBC事务使用 TransactionTemplate对事务的使用 真实场景 Mysql事务使用autocommit说明在mysql有...

Spring的事务管理入门:编程式事务管理(TransactionTemplate)!!!

Spring可以支持编程式事务和声明式事务。Spring使用事务管理器,每个不同平台的事务管理器都实现了接口:PlatformTransactionManager此接口是事务管理的核心,提供了三个需要...

使用Spring(16)使用TransactionTemplate进行Spring编程式事务管理

TransactionTemplate 采用与Spring中别的 模板 同样的方法,如 JdbcTemplate 和 HibernateTemplate。它使用回调机制,将应用代码从样板式的资源获...

TransactionTemplate源码分析

出处:http://blog.csdn.net/itomge/article/details/9263181 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(...

编程式的事务管理 使用TransactionTemplate事务管理

Spring为我们提供了TransactionTemplate来进行事务管理下面是如何配置编程式事务管理器 ...

TransactionTemplate VS @transaction

Spring 提供多种方式进行事务管理 基于 TransactionDefinition、PlatformTransactionManager、TransactionStatus 编程式事务管理是 S...

spring-boot-2.0.0.M7 源码包

  • 2017年12月09日 17:46
  • 7.82MB
  • 下载

spring boot security学习练习demo源码

  • 2017年12月09日 17:05
  • 59KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring 中的TransactionTemplate
举报原因:
原因补充:

(最多只允许输入30个字)