`

java中Spring嵌套事务控制

阅读更多

 

A类

B类

C类


场景:A类 嵌套 B类  B类嵌套C类;都是由spring控制事务。

要求:C类报异常时,不影响A类、B类的后续逻辑执行。

问题:C类报异常,A类和B类的后续逻辑能执行,但是,数据却回滚了。

分析:初步分析为:Spring事务控制不严格导致。

解决:C类中显示开启事务。方法如下:

  //销售管理资料下发省份(要求:是否下发成功,不影响后续代码执行;因此要开启一个新事务)
  //开启新事务,防止跟其他事务混淆
  DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) SpringContextFactory
  .getBean("transactionManager");
  DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
  def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); //事物隔离级别,开启新事务,与A类和B类不使用同一个事务。
  TransactionStatus status = transactionManager.getTransaction(def); //获得事务状态java教程网

try{

     **************代码逻辑****************

    transactionManager.commit(status);
  }catch (Exception e) {
   // TODO: handle exception
   transactionManager.rollback(status);
  }

8
10
分享到:
评论
1 楼 lilai 2012-07-08  

相关推荐

    Spring中事务的传播属性详解

    嵌套事务允许独立于外部事务的回滚,但在外部事务回滚时,嵌套事务也会回滚。 #### 五、总结 通过上述分析,我们可以看出Spring中的事务传播行为提供了丰富的选项,可以帮助开发者精确地控制事务的执行逻辑。正确...

    Spring Nested事务简单案例

    4. **嵌套事务的深度**:理论上,你可以无限嵌套事务,但实际应用中应避免过深的嵌套,因为它可能导致性能问题,并增加代码的复杂性。 5. **事务隔离级别**:Nested事务继承了父事务的隔离级别,所以不需要额外设置...

    spring 事务基于注解模式

    在上述例子中,`createUser`方法会被包裹在一个事务中,如果其中一个数据库操作失败,整个事务都会回滚。 ### 4. 检查点和回滚 Spring默认会在出现未捕获的运行时异常时回滚事务。通过`rollbackFor`和`...

    spring 事务传播 demo

    本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...

    Spring Boot数据库事务控制.zip

    6. **事务嵌套**:在同一个事务中调用另一个@Transactional方法,Spring会处理这种事务嵌套。默认情况下,子事务将继承父事务的隔离级别和传播行为。 7. **事物边界**:理解事务边界是确保事务正确性的关键。事务...

    深入理解spring的事务管理机制

    7. **PROPAGATION_NESTED**:如果当前存在活动事务,则在嵌套事务中运行;如果没有活动事务,则按`PROPAGATION_REQUIRED`执行。这种传播行为仅对`DataSourceTransactionManager`有效。 #### 三、数据库隔离级别 ...

    基于java的企业级应用开发:Spring事务管理概述.ppt

    编程式事务管理直接在代码中控制事务的开始、提交和回滚,而声明式事务管理则通过配置XML或使用注解来定义事务边界,更加简洁和易于维护。在大多数情况下,声明式事务管理是推荐的实践,因为它降低了事务管理的侵入...

    Java中的事务处理

    - 默认情况下,如果在事务中发生未检查异常(继承自RuntimeException的异常)或Error,Spring会自动回滚事务。对于检查异常(非RuntimeException),需要显式地在@Transactional注解中指定 rollbackFor 属性。 7. ...

    java_spring_day04.pdf

    根据给定的文件信息,我们可以深入探讨Java Spring框架与SSH(Struts2、Spring、Hibernate)整合的关键知识点,以及如何通过具体案例掌握这些技术的应用。 ### 知识点一:SSH整合_方案01 #### 描述: SSH整合方案...

    spring 事务管理的理解

    Spring定义了七种事务传播行为,例如PROPAGATION_REQUIRED(默认行为,如果当前存在事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(始终新建事务,即使在现有事务中调用)等。这些传播行为可以帮助我们处理嵌套...

    Spring 事务 代码

    NEW(新建事务,如果已存在则挂起)、NOT_SUPPORTED(不支持事务,如果存在则挂起)、NEVER(永不运行在事务中)、NESTED(如果存在事务,则在嵌套事务内运行,否则新建)。 - 超时(timeout):定义事务可以运行的...

    Spring事务传播Demo.zip

    例如,一个PROPAGATION_REQUIRED的方法调用了一个PROPAGATION_REQUIRES_NEW的方法,那么第二个方法将在新的独立事务中执行,即使第一个方法已经在一个事务中。 SSH,通常指的是Spring、Struts和Hibernate三个开源...

    A类B类C类嵌套事务问题相关类

    在嵌套事务中,一个事务可以包含其他事务,这样的结构在复杂的业务逻辑中很常见,比如在一个大事务中执行多个小事务,每个小事务有自己的提交和回滚规则。 首先,我们来看B类。B类可能是一个业务服务类,其中包含了...

    Spring声明式事务处理

    - `NESTED`:如果当前存在事务,则创建一个嵌套事务。如果当前没有事务,则行为同`REQUIRED`。 隔离级别主要有五种,它们决定了事务之间如何共享数据: - `READ_UNCOMMITTED`:最低级别,允许读取未提交的数据,...

    Spring框架+Spring中的事务

    - **NESTED**:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新事务。 **2. 事务传播行为的应用场景** - **REQUIRED**:适用于大多数情况,因为大多数业务操作都需要在事务上下文中运行。 ...

    spring几种事务配置详解【精】

    - `NESTED`:如果当前存在事务,则在一个嵌套事务内执行;如果没有事务,则按`REQUIRED`行为执行。 4. **事务的隔离级别** - `READ_UNCOMMITTED`:最低级别,可能导致脏读、不可重复读和幻读。 - `READ_...

    springtransaction 事务管理

    Spring 事务管理是Spring框架的核心特性之一,它提供了一种在Java应用中处理事务的统一方式,无论是数据库事务还是程序中的逻辑事务。Spring事务管理主要包括编程式事务管理和声明式事务管理两种方式,使得开发者...

    spring 事务传播与隔离级别DEMO

    不可重复读则是在同一事务中,两次读取同一数据,结果不同,因为其他事务修改了数据。幻读发生在查询过程中,事务前后两次相同查询结果数量不一致,原因是其他事务插入了新的符合查询条件的记录。 Spring通过`@...

    JavaEE spring事务操作环境和基本功能搭建

    6. **测试验证**:编写测试用例,模拟不同的事务场景,如正常操作、异常回滚、嵌套事务等,以确保事务管理功能正常工作。 在实际项目中,Spring的声明式事务管理通常与Spring MVC或Spring Boot结合使用,提供更便捷...

    spring+mybatis的声明式事务

    在Spring+MyBatis的声明式事务中,这些特性由Spring的事务管理器保证。例如,如果在事务过程中发生异常,Spring会自动回滚事务以保持数据的一致性。 7. **事务的隔离级别** Spring支持四种事务隔离级别:READ_...

Global site tag (gtag.js) - Google Analytics