测试spring事务传播特性:
@Override @Transactional(propagation = Propagation.REQUIRED) public void saveLoginInfo(String userName, String dateString, String result) { //调用测试方法(本类内的方法) this.saveLoginInfoCall("2000040", "2013-09-10 00:00:00.000", "2000040|张美霞test|saveLoginInfo|big1"); //调用测试方法(注入service的方法) this.storeServiceImpl.saveLoginInfoCall("2000040", "2013-09-10 00:00:00.000", "2000040|张美霞test|saveLoginInfo|big1|big2"); String sql = "INSERT INTO prc_mbl_usr_usg (slsprs_id, lgn_dtm, lgn_sts ) VALUES (" + "'" + userName + "'," + "'" + dateString + "'," + "'" + result + "')"; logger.info(sql); this.baseDaoImpl.insert(sql); int m = 0; if (m == 0) { throw new RuntimeException("出错了!"); } this.baseDaoImpl.insert(sql); }
本类方法saveLoginInfoCall和storeServiceImpl类中的方法一致:
@Transactional(propagation = Propagation.REQUIRES_NEW) public void saveLoginInfoCall(String userName, String dateString, String result) { String sql = "INSERT INTO prc_mbl_usr_usg (slsprs_id, lgn_dtm, lgn_sts ) VALUES (" + "'" + userName + "'," + "'" + dateString + "'," + "'" + result + "')"; logger.info(sql); this.baseDaoImpl.insert(sql); int m = 0; // if (m == 0) { // throw new RuntimeException("出错了!"); // } this.baseDaoImpl.insert(sql); }
测试代码:
@Test public void testTransaction() { System.out.println(AopUtils.isAopProxy(loginServiceImpl)); System.out.println(loginServiceImpl.getClass().getName()); loginServiceImpl.saveLoginInfo("2000040", "2013-09-10 00:00:00.000", "2000040|张美霞test|saveLoginInfo"); }
声明一下:saveLoginInfo()方法所在类为loginServiceImpl
经测试发现,当saveLoginInfo()方法调用本类内的saveLoginInfoCall()方法后,然后抛出异常,本类内的方法saveLoginInfoCall()并没有插入数据库,而调用storeServiceImpl类的saveLoginInfoCall()方法则插入数据库;按照REQUIRES_NEW事物的传播特性来说,两个方法的出入都应该能成功(都是新起一个事物,在自己的事务内提交,在异常抛出之前就已经提交到数据库)。可是调用本类内的方法就是没有成功!
然后继续测试,把本类内和storeServiceImpl类内的方法saveLoginInfoCall()的事务注解全部改为NEVER,然后测试发现:在执行本类内的方法saveLoginInfoCall()时没有报错,而是在执行storeServiceImpl类的saveLoginInfoCall()方法时报错,安装NEVER的传播特性来说,在执行本类内的saveLoginInfoCall()方法时就会报错(NEVER事务传播特性为不支持事务,存在事务则抛出异常)
根据上面的可以总结为,当一个方法使用spring事务时,调用同一个类的另个使用spring事务的方法时候,被调用方法的事务不生效,可是为什么呢?现在还没找到下手寻找答案的线索!
相关推荐
事务传播行为(Transaction Propagation)是Spring事务管理中一个关键的概念,用于定义在一个事务方法被调用时,如何与当前运行的事务进行交互。本文将深入探讨“Spring事物传播测试表”所涉及的知识点。 首先,...
事务的传播特性测试.xlsx
本DEMO主要探讨的是Spring事务的传播行为和隔离级别,这些概念对于理解和优化数据库操作至关重要。让我们深入理解这些概念及其实际应用。 首先,我们来谈谈事务的传播行为。在Spring中,当一个方法被另一个具有事务...
在开发过程中,进行充分的测试,尤其是集成测试和压力测试,可以帮助开发者及时发现问题并加以修复。 总结来说,Spring事务管理失效的原因是多方面的,涵盖从代理模式原理到AOP的实现细节,再到异常处理机制,以及...
首先,Spring事务管理是Spring框架的核心特性之一,它允许我们以声明式或编程式的方式管理事务。声明式事务管理通过配置元数据(如XML或注解)来定义事务边界,而编程式事务管理则是在代码中显式调用...
在Spring框架中,事务管理是核心特性之一,用于确保数据操作的一致性和完整性。当一个方法(A方法)内部调用另一个方法(B方法)时,可能会遇到事务控制...这个示例代码对于理解和调试Spring事务管理的问题非常有帮助。
Spring声明式事务管理是Spring框架的核心特性之一,它允许开发者在不侵入业务代码的情况下,对应用程序的事务进行管理。这种方式极大地提高了代码的可维护性和灵活性。以下是对Spring声明式事务配置的详细说明: 1....
- `propagation`: 事务传播行为,如`REQUIRED`(默认)表示如果当前没有事务,则新建一个;`SUPPORTS`表示如果已有事务就加入,没有则不开启新事务等。 - `isolation`: 事务隔离级别,如`DEFAULT`(默认)遵循数据库...
在IT领域,Spring框架是Java开发中的核心工具之一,它为构建高质量的、可维护的、松耦合的应用程序...在实践中,你可能会遇到的问题包括事务传播行为、异常回滚规则、事务隔离级别等,这些都是进一步学习和研究的方向。
### Spring事务配置的五种方式详解 #### 一、引言 在企业级应用开发中,事务处理是非常重要的一部分,特别是在涉及多个数据库操作时。Spring框架提供了强大的事务管理功能,支持编程式和声明式两种事务处理方式。...
1.业务代码列举7种事务传播机制的情况,每个测试方法都附带日志分析记录、使用场景和实际场景,小白也能看得懂!!! 2.在测试类Test包下,使用juniter进行测试,方便快捷清晰。 ①用到了@BeforeEach,正式执行测试...
3. **事务传播行为**:Spring提供了多种事务传播行为,例如PROPAGATION_REQUIRED(默认值,如果当前存在事务,则加入该事务;如果不存在,则创建一个新的事务)、PROPAGATION_SUPPORTS(如果当前存在事务,则加入该...
本文将主要围绕Spring事务测试展开,讲解如何在Spring中进行事务管理和测试。 在Spring框架中,事务管理是通过声明式或编程式的方式来实现的。声明式事务管理通过配置XML或者使用注解来定义事务边界,使得开发者...
本项目“spring-transactions-jpa”旨在通过MySql数据库进行一系列测试,以深入理解Spring事务传播行为,这对于开发复杂的分布式系统至关重要。在本文中,我们将详细探讨Spring事务的传播行为以及如何在JPA(Java ...
在OSGi(Open Service Gateway Initiative)环境中配置Spring事务可能会遇到一些挑战,因为OSGi的模块化特性使得类加载和依赖管理变得复杂。本篇文章将详细探讨如何在OSGi环境中正确配置Spring事务管理。 首先,...
- **统一的事务策略**:Spring事务管理支持JDBC、Hibernate、JPA等多种数据访问技术,提供了一致的事务处理方式。 - **灵活性**:可以选择编程式或声明式事务管理,根据项目需求调整事务控制粒度。 - **异常传播**:...
在Java Web开发中,Spring和MyBatis是两个非常重要的框架。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面...同时,良好的事务管理能够确保数据的一致性和完整性,避免因并发问题引发的数据不一致。
通过这些测试,你可以确保Spring事务管理在实际应用中的稳定性和可靠性。 总的来说,理解并熟练运用Spring的事务管理是成为合格的Java开发者所必需的技能之一。它不仅有助于保证数据一致性,还能提高代码的可读性...
Spring定义了7种事务传播行为,例如`Propagation.REQUIRED`(如果当前存在事务,则加入;若无,则新建)、`Propagation.SUPPORTS`(如果存在事务则支持,否则不开启新事务)等。选择合适的传播行为可以确保事务处理...
在Java开发中,Spring框架和Hibernate ORM工具是两个非常重要的组件。Spring提供了强大的依赖注入(DI...在实际开发中,可以根据项目需求调整事务的传播属性、隔离级别、超时限制等高级特性,以实现更精细的事务管理。