Spring提供两种方式的编程式事务管理:
-
使用
TransactionTemplate
-
直接使用一个
PlatformTransactionManager
实现
如果你选择编程式事务管理,Spring推荐使用 TransactionTemplate
。
使用TransactionTemplate
TransactionTemplate
采用与Spring中别的 模板 同样的方法, 如 JdbcTemplate
。它使用回调机制,将应用代码从样板式的资源获取和释放代码中解放出来, 这样写出的代码是目的驱动的,把精力集中在开发者想要做的事情上。
应用的代码必须在一个事务性的上下文中执行,这样就会像这样一样显式的使用TransactionTemplate
。你作为一个应用程序员, 会写一个 TransactionCallback
或TransactionCallbackWithoutResult的实现, (通常会用匿名类来实现 )这样的实现会包含所以你需要在该事务上下文中执行的代码。 然后你会把一个你自己实现TransactionCallback或TransactionCallbackWithoutResult
的实例传递给TransactionTemplate
暴露的execute(..)
方法。
public class PointPayService implements IPayService { private final TransactionTemplate transactionTemplate; public PointPayService(PlatformTransactionManager platformTransactionManager) { Assert.notNull(platformTransactionManager, "The 'PlatFormTransactionManager' arguement must not be null!"); transactionTemplate = new TransactionTemplate(platformTransactionManager); transactionTemplate.setTimeout(30); transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ); } @Override public String pay(final long userId, final long money) { return transactionTemplate.execute(new TransactionCallback<String>() { @Override public String doInTransaction(TransactionStatus transactionStatus) { System.out.println("用户:" + userId + "使用积分支付金额:" + money); return "ok"; } }); } private void transactionWithoutReturn() { // 不需要返回值时使用TransactionCallbackWithoutResult transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { try { operation1(); operation2(); } catch (Exception e) { // 抛出异常时进行回滚 transactionStatus.setRollbackOnly(); } } private void operation1() { } private void operation2() { } }); } }
使用Spring XML配置来定制TransactionTemplate的事务属性。 'TransactionTemplate'可以被注入到所有需要的服务中去。
<bean id="sharedTransactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="isolationLevelName" value="ISOLATION_READ_UNCOMMITTED"/> <property name="timeout" value="30"/> </bean>"
最后,TransactionTemplate 类的实例是线程安全的,任何状态都不会被保存。 TransactionTemplate 实例 的确会 维护配置状态,所以当一些类选择共享一个单独的 TransactionTemplate实例时, 如果一个类需要使用不同配置的TransactionTemplate(比如,不同的隔离等级), 那就需要创建和使用两个不同的TransactionTemplate。
使用PlatformTransactionManager
也可以使用 org.springframework.transaction.PlatformTransactionManager
来直接管理你的事务。只需通过bean的引用,简单的把你在使用的PlatformTransactionManager
传递给你的bean。 然后,使用TransactionDefinition
和TransactionStatus
对象, 你可以启动,回滚和提交事务。
DefaultTransactionDefinition def = new DefaultTransactionDefinition(); // 设置事务名称 def.setName("SomeTxName"); // 设置事务传播行为 def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = txManager.getTransaction(def); try { // execute your business logic here } catch (Exception ex) { txManager.rollback(status); throw ex; } txManager.commit(status);
一般情况下我们使用声明式事务方式,在有特殊情况下要使用编程式事务时,推荐使用TransactionTemplate方式
相关推荐
Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握。本教程从基础知识开始,详细分析了 Spring 事务管理的使用方法,为读者理清思路。
NULL 博文链接:https://konglx.iteye.com/blog/1836826
本代码使用H2内存数据库演示spring事务使用,包括编程式事务,声明式事务@Transactional使用,自定义事务事务注解实现自定义事务管理器
全面分析_Spring_的编程式事务管理及声明式事务管理.
全面分析_Spring_的编程式事务管理及声明式事务管理
Spring为了简化事务管理的代码:提供了模板类 TransactionTemplate,所以手动编程的方式来管理事务,只需要使用该模板类即可
本篇文章主要介绍了详解Spring学习之编程式事务管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
全面分析Spring的编程式事务管理与声明式事务管理.doc
spring编程式和声明式事务管理,事务放在dao,存演示版本!懂!
Java高级编程 实验报告 spring 声明事务 实验目的 掌握spring 声明式事务管理配置 实验环境 本实验采用本实验采用的eclipse或者 Myeclpse开发工具。Spring 4.0以上 Jdk1.7以上、oracle/mysql。
而且编程式事务管理会造成事务管理代码和被管理的代码耦合,不符合软件工程中“高内聚、低耦合”的要求。若采用AOP,则可以避免以上缺陷。 作者博客的示例代码:http://legend2011.blog.51cto.com/3018495/1239139。
4.掌握基于AOP的声明式事务编程 按照三层架构构建web项目,在业务层添加事务控制。 1.创建web project项目命名为aopweb 2.添加spring支持、hibernate支持 3.配置WEB-INF/applicationContext.xml提供基于AOP的声明...
* 编程式事务管理 * 手动编写代码进行事务管理.(很少使用) * 声明式事务管理: * 基于TransactionProxyFactoryBean的方式.(很少使用) * 需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行...
Spring框架的声明式事务管理是Java开发中的核心特性,它为高效且可靠的数据操作提供了强大支持。Spring通过@Transactional注解以及底层的AOP和代理机制实现了声明式事务。这个机制允许开发者通过简单的注解就能控制...
09_4编程式事务管理.rar
Spring事务管理.pdf 1.资料 2.本地事务与分布式事务 3.编程式模型 4.宣告式模型
spring事务管理几种方式代码实例:涉及编程式事务,声明式事务之拦截器代理方式、AOP切面通知方式、AspectJ注解方式,通过不同方式实例代码展现,总结spring事务管理的一般规律,从宏观上加深理解spring事务管理特性...
Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理; 描述了声明式事务管理,XML,注解;事务配置详解。。。
Spring的事务框架将开发过程中事务管理相关的关注点进行适当的分离,并对这些关注点进行合 理的抽象,最终打造了一套使用方便,...带来了原来只有CMT才有的声明式事务管理的特殊待遇,却无需绑定到任何的应用服务器上。