spring事物传播测试表:页面显示不全,请下载附件查看
A未否开启事务 | B声明传播类型 | A是否异常 a1001:是 a1002:否 |
B是否异常 aa:是 bb:否 |
A是否要回滚 | B是否要回滚 | 测试结果A是否回滚 | 测试结果B是否回滚 | 测试结果 | 特点总结 | 备注 |
否 | PROPAGATION_REQUIRED | 是 | 是 | 否 | 是 | 否 | 是 | P | 支持当前事务,如果当前没有事务,就新建一个事务 | 1、A,B分别代表两个不同类中的方法:ServiceA.methodA() 和ServiceB.methodB() 2、这里测试的是spring的声明式事务,所以A,B不能不表示同一个类中的两个方法。在同一个类中的方法调用,被调用的方法的事务声明不起效果,因为同一个类中的的方法直接调用,不会插入Spring中AOP的事务切面 3、测试代码A调用B,需要捕捉B的异常,否则B异常溢出会影响到A 参考代码格式: ServiceA { /** * 事务属性配置为 PROPAGATION_REQUIRED */ void methodA() { try { ServiceB.methodB(); } catch (SomeException) { // 捕捉methodB的异常 } } } 4、A开启事务,这里通过声明@Transactional(value = "transactionManager",propagation=Propagation.REQUIRED),不开启事务,则把声明去掉 5、 |
否 | PROPAGATION_REQUIRED | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_REQUIRED | 否 | 是 | 否 | 是 | 否 | 是 | P | ||
否 | PROPAGATION_REQUIRED | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_REQUIRED | 是 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_REQUIRED | 是 | 否 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_REQUIRED | 否 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_REQUIRED | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_SUPPORTS | 是 | 是 | 否 | 否 | 否 | 否 | P | 支持当前事务,如果当前没有事务,就以非事务方式执行 | |
否 | PROPAGATION_SUPPORTS | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_SUPPORTS | 否 | 是 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_SUPPORTS | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_SUPPORTS | 是 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_SUPPORTS | 是 | 否 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_SUPPORTS | 否 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_SUPPORTS | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_MANDATORY | 是 | 是 | Exception | Exception | Exception | Exception | P | 必须在一个事务中运行。也就是说,他只能被一个父事务调用。否则,他就要抛出异常:No existing transaction found for transaction marked with propagation 'mandatory' | |
否 | PROPAGATION_MANDATORY | 是 | 否 | Exception | Exception | Exception | Exception | P | ||
否 | PROPAGATION_MANDATORY | 否 | 是 | Exception | Exception | Exception | Exception | P | ||
否 | PROPAGATION_MANDATORY | 否 | 否 | Exception | Exception | Exception | Exception | P | ||
是 | PROPAGATION_MANDATORY | 是 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_MANDATORY | 是 | 否 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_MANDATORY | 否 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_MANDATORY | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_REQUIRES_NEW | 是 | 是 | 否 | 是 | 否 | 是 | P | 新建事务,如果当前存在事务,把当前事务挂起。(即AB事务各自独立,互不影响) | |
否 | PROPAGATION_REQUIRES_NEW | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_REQUIRES_NEW | 否 | 是 | 否 | 是 | 否 | 是 | P | ||
否 | PROPAGATION_REQUIRES_NEW | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_REQUIRES_NEW | 是 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_REQUIRES_NEW | 是 | 否 | 是 | 否 | 是 | 否 | P | ||
是 | PROPAGATION_REQUIRES_NEW | 否 | 是 | 否 | 是 | 否 | 是 | P | ||
是 | PROPAGATION_REQUIRES_NEW | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NOT_SUPPORTED | 是 | 是 | 否 | 否 | 否 | 否 | P | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。(即A事务与B非事务各自独立,互不影响) | |
否 | PROPAGATION_NOT_SUPPORTED | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NOT_SUPPORTED | 否 | 是 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NOT_SUPPORTED | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_NOT_SUPPORTED | 是 | 是 | 是 | 否 | 是 | 否 | P | ||
是 | PROPAGATION_NOT_SUPPORTED | 是 | 否 | 是 | 否 | 是 | 否 | P | ||
是 | PROPAGATION_NOT_SUPPORTED | 否 | 是 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_NOT_SUPPORTED | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NEVER | 是 | 是 | 否 | 否 | 否 | 否 | P | 以非事务方式执行,如果当前存在事务,则抛出异常:Existing transaction found for transaction marked with propagation 'never' | |
否 | PROPAGATION_NEVER | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NEVER | 否 | 是 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NEVER | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_NEVER | 是 | 是 | Exception | Exception | Exception | Exception | P | ||
是 | PROPAGATION_NEVER | 是 | 否 | Exception | Exception | Exception | Exception | P | ||
是 | PROPAGATION_NEVER | 否 | 是 | Exception | Exception | Exception | Exception | P | ||
是 | PROPAGATION_NEVER | 否 | 否 | Exception | Exception | Exception | Exception | P | ||
否 | PROPAGATION_NESTED | 是 | 是 | 否 | 是 | 否 | 是 | P | 以嵌套方式执行,如果当前存在事务,则嵌套在该父事务中,父事务回滚会导致子事务回滚,反之,子事务回滚不会造成父事务回滚。如果当前不存在事务,则以PROPAGATION_REQUIRED方式执行 | |
否 | PROPAGATION_NESTED | 是 | 否 | 否 | 否 | 否 | 否 | P | ||
否 | PROPAGATION_NESTED | 否 | 是 | 否 | 是 | 否 | 是 | P | ||
否 | PROPAGATION_NESTED | 否 | 否 | 否 | 否 | 否 | 否 | P | ||
是 | PROPAGATION_NESTED | 是 | 是 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_NESTED | 是 | 否 | 是 | 是 | 是 | 是 | P | ||
是 | PROPAGATION_NESTED | 否 | 是 | 否 | 是 | 否 | 是 | P | ||
是 | PROPAGATION_NESTED | 否 | 否 | 否 | 否 | 否 | 否 | P |
相关推荐
1.业务代码列举7种事务传播机制的情况,每个测试方法都附带日志分析记录、使用场景和实际场景,小白也能看得懂!!! 2.在测试类Test包下,使用juniter进行测试,方便快捷清晰。 ①用到了@BeforeEach,正式执行测试...
本文将主要围绕Spring事务测试展开,讲解如何在Spring中进行事务管理和测试。 在Spring框架中,事务管理是通过声明式或编程式的方式来实现的。声明式事务管理通过配置XML或者使用注解来定义事务边界,使得开发者...
在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...
- 在Service层的方法上添加@Transactional注解,指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)和隔离级别。 - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些...
4. **事务传播行为**: @Transactional注解还支持不同的事务传播行为,如PROPAGATION_REQUIRED(默认,如果当前存在事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(总是新建事务,如果存在则挂起)等。...
5. **配置Spring事务管理器**:创建Atomikos事务管理器的bean,并配置Spring的PlatformTransactionManager,指定使用Atomikos的UserTransaction。 6. **代码实现**:在业务逻辑中,通过Spring的@Transactional注解...
- 使用`PlatformTransactionManager`接口配置Spring的声明式事务管理,设置事务传播属性、隔离级别和超时时间。 4. **iBatis配置** - 配置iBatis的SqlSessionFactory,指定数据源和映射文件。 - 编写SQL映射文件...
6. **事务管理**:介绍Spring的声明式和编程式事务管理,以及事务传播行为。 7. **Spring Boot**:简述Spring Boot的快速开发特性,如自动配置、起步依赖和Actuator。 8. **测试**:讲解Spring测试框架,包括单元...
压缩包中的文件名列表没有具体列出,但通常会包括上述组件的相关jar文件,如`spring-context.jar`, `spring-beans.jar`, `spring-aop.jar`, `spring-jdbc.jar`, `spring-orm.jar`, `spring-tx.jar`, `spring-webmvc....
7. **Spring Context**:ApplicationContext是Spring中的核心容器,负责管理应用的所有bean,并提供了配置、事件传播、国际化等功能。 8. **其他模块**:Spring还提供了其他模块,如Spring Test用于单元测试和集成...
Spring框架不仅提供了依赖注入的功能来促进松耦合,还提供了声明式事务管理、事件传播等特性。学习Spring框架可以帮助开发者构建高效、可测试和可管理的代码。 #### Spring框架版本 Spring经历了多个版本的迭代,每...
Spring的声明式事务管理允许开发者通过注解或XML配置来声明事务边界,无需编写事务管理代码。这种方式降低了事务管理的复杂性,提高了代码的可读性。 15. Spring对其它企业应用支持 Spring还支持其他企业服务,如...
6. **spring-test-3.2.11.RELEASE.jar**:这个模块支持Spring应用的单元测试和集成测试,提供了JUnit和TestNG的集成,使得测试更加方便。 7. **spring-aop-3.2.11.RELEASE.jar**:Spring的面向切面编程模块,允许在...
10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...
**Spring事务管理** 的配置主要涉及到`TransactionProxyFactoryBean`,它可以创建事务代理,根据指定的事务属性(如`transactionAttributes`)决定事务的传播行为。这些传播行为决定了新事务何时开始、何时结束,...
它支持国际化、事件传播、事务管理和AOP等功能,并且是其他模块(如MVC、JDBC、Hibernate、JDO等)的基础。 - **加载上下文的几种方式**: 1. **通过`import`标签引入其他配置文件**:在`spring-mvc.xml`中使用`...
9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用TransactionTemplate 9.6.2. 使用PlatformTransactionManager 9.7. 选择编程式事务管理还是声明...
9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用TransactionTemplate 9.6.2. 使用PlatformTransactionManager 9.7. 选择编程式事务管理还是声明...
Spring JDBC通过JdbcTemplate和NamedParameterJdbcTemplate等类,提供了事务管理、结果集映射、异常转换等高级功能,让数据库操作变得更加简单且易于测试。 至于标签"AOP aspect",它涉及到Spring的面向切面编程。...