SPRING的事务管理中常见如下配置:
PROPAGATION_REQUIRED
-- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS
-- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
-- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
-- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
-- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
-- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
-- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
除了PROPAGATION_NESTED和PROPAGATION_REQUIRES_NEW不好区分外,其他都可以根据字面意思就能理解清楚,就不多累述了,主要还是讲解下PROPAGATION_NESTED和PROPAGATION_REQUIRES_NEW的区别。
PROPAGATION_REQUIRES_NEW:如果当前存在事务,就把当前事务事务挂起,开启一个新的事务,等当前事务结束后,继续原来的事务。
PROPAGATION_NESTED :是一个嵌套事务,如果外围没有事务,就开启一个新的事务,这种情况下同PROPAGATION_REQUIRED。对于嵌套的事务,同最关键的是,PROPAGATION_NESTED引入了savepoint ,嵌套事务开始执行时,它将取得一个savepoint,如果这个嵌套事务失败,则回到这个savepoint,继续执行外部事务,只有外部事务结束后,嵌套的事务才会被提交。
见下面的代码说明:
PROPAGATION_REQUIRES_NEW
1.
A.begin();
update(1);
B.begin();
upate(2);
B.rollback();//(or commit fail);
update(3);
A.commit();//假设成功,则结果为1,3被修改,2不被修改
1.
A.begin();
update(1);
B.begin();
upate(2);
B.commit();
update(3);
A.rollback();//假设成功,则结果为2被修改,1,3不被修改
PROPAGATION_NESTED :
1.parent.begin();
update(1);
child = parent.createChild();
child.begin();
update(2);
child.rollback() (or commit but fail);
update(3);
parent.commit();//假设成功,则结果为1,3被修改,2不被修改
3.parent.begin();
update(1);
child = parent.createChild();
child.begin();
update(2);
child.commit(); //假设成功
update(3);
parent.rollback() (or commit but fail);//结果为1,2,3都不被修改
3.parent.begin();
update(1);
child = parent.createChild();
child.begin();
update(2)
child.commit(); //假设成功
update(3)
parent.rollback(); //结果为1,2,3都不被修改。
分享到:
相关推荐
本篇文章我们将深入探讨Spring JDBC事务控制,这是Spring框架中处理数据持久化的一个关键特性。Spring JDBC提供了对数据库事务的高级封装,使得开发者能够方便、高效地管理事务,而无需过多关注底层实现细节。 首先...
本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 1. **编程式事务管理**:通过使用`PlatformTransactionManager`接口及其实现类(如`...
在本篇Spring学习笔记中,我们将探讨如何使用Spring框架的注解方式来管理事务,这是一种在现代Java应用中广泛采用的方法。Spring框架以其强大的依赖注入和面向切面编程能力,为事务管理提供了简洁且高效的解决方案。...
在Spring框架中,事务管理是核心功能之一,它确保了数据的一致性和完整性。这篇"Spring学习笔记(18)-...这篇笔记详细阐述了Spring配置文件实现事务管理的方法,是初学者和进阶者理解Spring事务管理机制的重要参考资料。
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。
5. **Spring Boot**:虽然标题未提及Spring Boot,但作为现代Spring应用的首选启动方式,我们也可以探讨一下。Spring Boot简化了Spring应用的初始搭建和配置,它默认配置了许多常见功能,使开发者能快速启动项目。 ...
在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供了强大的事务管理功能,使得开发者可以方便地控制事务的边界,保证数据的一致性和完整性。 首先,理解事务...
本实例将深入探讨Spring事务管理的实现与应用。 首先,Spring事务管理分为编程式事务管理和声明式事务管理两种方式。编程式事务管理是通过调用TransactionTemplate或直接使用PlatformTransactionManager接口来控制...
在本课程中,我们将深入探讨Spring事务传播原理和数据库事务操作的基本概念,这对于有Spring开发经验的人员来说,是进一步深化事务控制理解的关键。我们还将触及分布式事务的初步知识,帮助开发者更好地掌握基于...
本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...
本文将深入探讨Spring4中JdbcTemplate的事务管理以及相关知识点。 首先,理解JdbcTemplate的基本概念。JdbcTemplate是一个模板类,它封装了常见的JDBC操作,如执行SQL查询、更新和存储过程,避免了手动管理连接、预...
MyBatis与Spring的整合,实现了DAO(Data Access Object)的声明式事务管理,提高了开发效率。 三、Spring与MyBatis整合 1. 配置整合:在Spring的配置文件中,需要添加MyBatis的SqlSessionFactoryBean,配置数据源...
4. TransactionalExecutor:这是MyBatis-Spring的另一个重要组件,它负责在Spring事务管理下执行SQL。当在Spring的事务边界内运行时,TransactionalExecutor会确保SqlSession的操作与事务同步。 5. 1.0.2版本特性:...
本文将深入探讨如何将Spring与Hibernate进行集成,并重点介绍声明式事务的配置与使用。 Spring框架是一个全面的企业级应用开发框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,简化了Java应用的复杂性。另...
本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...
本文将深入探讨Spring与Hibernate整合时的事务管理,帮助你更好地理解和运用这些技术。 首先,Spring框架是Java企业级应用的基石,它提供了一种依赖注入(Dependency Injection,DI)的方式,使得组件之间的耦合度...
本文将深入探讨如何在Spring Cloud环境中整合分布式事务框架TX-LCN,以实现高效、一致的数据操作。 TX-LCN(Transaction for LCN)是一个轻量级的分布式事务解决方案,它为Java开发者提供了一种简单易用的方式来...
本文将深入探讨Spring中的事务管理,包括其基本概念、工作原理以及如何在实际项目中配置和使用。 首先,我们需要了解什么是事务。事务是一组数据库操作,这些操作要么全部成功,要么全部失败。在事务中,如果任何...
本文将深入探讨Spring TX 5.0.0.0.RELEASE.jar这个特定版本的细节,帮助开发者更好地理解和应用它。 Spring TX是Spring框架中的事务抽象层,它为应用程序提供了声明式和编程式的事务管理。声明式事务管理是Spring的...