`

spring异常回滚机制

阅读更多




   修改异常时发现个问题 当我想在process层里抛出异常,就throw new  Exception() 异常抛出让事务进行回滚,程序运行完发现事务却没有正常的回滚,之后将异常改为new RuntimeException() 时程序能正常的回滚 。具体的原因是spring配置文件中事务对异常的处理方式,具体原因如下 

Spring的AOP事务管理默认是针对unchecked exception回滚。 
也就是默认对RuntimeException()异常极其子类进行事务回滚。 
Exception作为基类,下面还分checked exception和unchecked exception。如果客户端可以通过其他的方法恢复异常,那么这种异 
常就是checked exception;如果客户端对出现的这种异常无能为力,那么这种异常就是Unchecked exception;简单来说,继承于 
RuntimeException的都是unchecked exception。 

Error: 

1.总是不可控制的(unchecked) 

2.经常用来用于表示系统错误或低层资源的错误 

3.如何可能的话,应该在系统级被捕捉 



Exception: 

1.可以是可被控制(checked) 或不可控制的(unchecked) 

2.表示一个由程序员导致的错误 

3.应该在应用程序级被处理 



Java 中定义了两类异常: 

1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中 
也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。 

2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是 
它们不能通过client code来试图解决,所以称为Unchecked exception 。 



解决办法: 

1.在针对事务的类中抛出RuntimeException异常,而不是抛出Exception。 

2.在txAdive中增加rollback-for,里面写自己的exception,例如自己写的exception为com.cn.untils.exception.***Exception 



<tx:advice id="txAdvice" transaction-manager="transactionManager"> 

  <tx:attributes> 

    <tx:method name="*" rollback-for="com.cn.untils.exception.***Exception"/> 

  </tx:attributes> 

</tx:advice> 



或者 



定义不会滚的异常 



<tx:advice id="txAdvice"> 

   <tx:attributes> 

      <tx:method name="update*" no-rollback-for="IOException"/> 

      <tx:method name="*"/> 

   </tx:attributes> 

</tx:advice> 

分享到:
评论

相关推荐

    spring 简单实例 事务回滚

    Spring默认只在遇到未检查异常时自动回滚事务,如果需要在特定检查异常下回滚,可以在`@Transactional`注解中指定`rollbackFor`属性。 5. 测试:创建一个测试类,模拟一个业务流程,使得在事务中发生异常,观察事务...

    Spring异常捕获且回滚事务解决方案

    在 Spring 中捕获异常并回滚事务需要我们了解 Spring 的事务机制和 AOP 代理的工作原理。通过使用正确的配置和编码,我们可以轻松地捕获异常并回滚事务。 Spring 异常捕获的原理 在 Spring 中,AOP 代理是如何...

    spring事务异常回滚实例解析

    本文主要关注的是声明式事务管理,尤其是涉及到事务异常回滚的实例解析。 首先,Spring 默认只有在遇到未捕获的 `RuntimeException` 或其子类时才会触发事务回滚。这意味着,如果在业务代码中对异常进行了捕获并...

    Spring事务传播机制.docx

    这里是事务异常回滚的地方,这里有个注意点是回滚会先用 rollbackOn 这个方法判断,默认情况下只有 RunTimeException 及 Error 是会进行回滚的,除非在@Transactional 显式声明了 rollbackFor。 二、Spring 的事务...

    Spring事务管理只对出现运行期异常进行回滚

    5. **事务的回滚规则**:除了默认仅对运行时异常回滚外,还可以自定义回滚规则,比如通过`@Transactional(rollbackFor = Exception.class)`来指定任何类型的异常都触发回滚。 6. **事务的边界**:事务的开始和结束...

    Spring中@Transactional事务回滚(含实例

    本文将深入解析`@Transactional`的事务回滚机制,并通过实例来详细讲解其工作原理,帮助读者理解和应用这一核心功能。 一、`@Transactional`注解介绍 `@Transactional`是Spring提供的一个注解,用于在方法级别或类...

    Java Spring 事务回滚详解

    本篇文章将深入探讨Java Spring中的事务回滚机制。 首先,让我们了解异常的基本概念。在Java中,异常是程序运行时遇到的错误,分为两类:Error和Exception。Error是程序无法恢复的严重问题,如虚拟机错误,通常不需...

    spring-控制事物回滚

    "spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...

    Spring中的@Transactional事物回滚实例源码

    4. **异常处理**:如果在执行过程中出现未捕获的异常,Spring会根据异常类型和注解配置决定是否回滚事务。 5. **事务提交或回滚**:如果没有异常,事务会被提交;如果有异常并且配置了回滚规则,事务会被回滚。 在...

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...

    Spring数据库访问之异常处理

    本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...

    spring 的代理机制

    Spring的代理机制是其核心特性之一,特别是在AOP(面向切面编程)中扮演着重要角色。AOP允许程序员在不修改源代码的情况下,通过在特定的“连接点”(如方法调用)插入额外的功能,例如日志、事务管理等。Spring提供...

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

    ### 深入理解Spring的事务管理机制 #### 一、事务的基本原理 Spring框架的事务管理机制是在Java开发环境中非常重要的一个组成部分,它能够帮助开发者简化事务处理的复杂度,提高应用程序的一致性和可靠性。Spring...

    浅谈Spring中@Transactional事务回滚及示例(附源码)

    @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked异常和unchecked异常的概念、@Transactional的...

    spring事务管理机制资料.zip

    Spring框架的事务管理机制是Java开发中不可或缺的一部分,它提供了对数据库事务的高效且灵活的控制,确保在复杂的业务逻辑中数据的一致性。本文将深入探讨Spring事务管理的各个方面,包括基本概念、管理方式、隔离...

    SPRING事务机制DEMO

    Spring事务机制是Java开发中非常重要的一个概念,它在企业级应用中扮演着核心角色,确保数据的一致性和完整性。Spring提供了多种事务管理方式,包括编程式事务管理和声明式事务管理。在这篇DEMO中,我们将重点探讨...

    spring 事务传播 demo

    在Java后端开发中,Spring的事务管理机制大大简化了事务控制,使得开发者可以更专注于业务逻辑,而不用关心底层事务的管理。通过声明式事务管理,我们只需在方法上添加@Transactional注解,而无需编写手动的try-...

    spring的运行机制或者运行原理.docx

    如果发生异常,则回滚事务。这种方式使得业务代码无需关心事务管理,符合AOP的编程思想。 3. **Spring MVC**: Spring MVC是Spring框架的一部分,负责处理Web应用程序的请求。所有HTTP请求都会被`...

    Spring事务介绍,分23类进行梳理

    10.Spring事务的回滚机制:使用回滚规则来控制事务的回滚,例如回滚异常、回滚超时等。 11.事务的隔离级别:使用隔离级别来控制事务的访问数据库的方式,例如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、...

Global site tag (gtag.js) - Google Analytics