`

spring声明式事务回滚注意事项

阅读更多
public void saveSomething(String param) throws Exception() {

          try{

                      doSomething.......;

           }catch(Exception e) {

           e.printStackTrace();

         }

}



问题分析

   由于在service层中,使用了try ,catch来捕捉异常,导致sevice层出现的异常被 “截留”,无法抛出给事务管理器,这就给事务管理器造成一种假象,就像程勋在运行中,没有产生任何问题,因此也就不会对出现runtimeException进行回滚操作。

正确做法

     在service中不进行异常的 try 和catch操作, 只是在方法定义中 throws exception(spring的事务管理也就能看到异常了),这些异常将由 struts的action来进行捕捉,在客户端给出友好的提示。

注意的问题

    spring的事务管理器只对 unchecked exception进行异常回滚,Error和RuntimeException及其子类是unchecked exception.其他exception是checked exception. 

举例: runtimeException有 以下

AnnotationTypeMismatchException, ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, EnumConstantNotPresentException, EventException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IncompleteAnnotationException, IndexOutOfBoundsException, JMRuntimeException, LSException, MalformedParameterizedTypeException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, RejectedExecutionException, SecurityException, SystemException, TypeNotPresentException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException



<prop key="*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>


Spring中对异常的回滚,默认是在抛出运行时异常(RuntimeException)时才回滚,对非运行时异常不回滚。如果使用 -Exception,意思是对所有的异常都回滚。Exception前面加上 "-" 时,表示发生指定异常时撤消操作(rollback),如果前面加上 "+",表示发生异常时立即提交(commit)。


分享到:
评论

相关推荐

    Spring声明式事务配置管理方法

    以下是关于Spring声明式事务配置管理的详细说明: 1. **事务管理器配置**: 在`/WEB-INF/applicationContext.xml`文件中,我们需要定义一个事务管理器Bean。通常,对于Hibernate,我们会使用`...

    spring3、 hibernate4 配置声明式事务管理(annotation方式)

    本篇将详细介绍如何在Spring 3和Hibernate 4中配置声明式事务管理,采用注解方式。 一、Spring的事务管理 Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式地调用...

    spring 注解事务管理

    Spring事务管理主要分为两种方式:编程式事务管理和声明式事务管理。编程式事务管理是通过编写代码来控制事务的开始、提交、回滚等操作,而声明式事务管理则是通过配置或注解来定义事务边界,更加直观和易于使用。 ...

    Spring Boot的事务控制.docx

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。 ##### 1. 编程式事务管理 编程式事务管理是指通过编写代码来控制事务的开始、提交和回滚。这种方式通常在代码中显式地使用`...

    java springAOP 事务+注释

    声明式事务管理主要依赖于Spring的AOP机制。我们可以通过XML配置或注解来声明事务边界。例如,在服务层的方法上使用`@Transactional`注解,可以自动开启、提交或回滚事务。如果方法抛出未检查异常(继承自`...

    spring学习之八--Hibernate编程式事务

    编程式事务管理是相对于声明式事务管理的一种方式,它允许开发者通过代码来显式控制事务的开始、提交、回滚等操作。这在某些特定场景下,如复杂的事务逻辑或需要自定义事务边界时,是很有用的。 首先,我们需要了解...

    springboot中事务管理@Transactional的注意事项与使用场景

    @Transactional 是 Spring 框架提供的一个注解,用于声明式事务管理。它可以将事务管理机制应用于 Java 方法上,以便在方法执行过程中发生异常时回滚事务。 使用 @Transactional 的注意事项 1. 只能应用于公共方法...

    springAop事务配置

    在Spring框架中,AOP(面向切面编程)被广泛用于实现事务管理,因为它允许我们以声明式的方式处理事务,从而让业务代码更加简洁、易维护。本篇将详细讲解Spring AOP如何进行事务配置,包括注解和非注解两种方式。 1...

    Spring3事务管理——使用@Transactional 注解.rar

    `@Transactional`注解来自`org.springframework.transaction.annotation`包,它是Spring对声明式事务管理的主要支持。这个注解可以应用在类或方法级别,用来定义事务的边界。当注解在类级别时,所有该类的公共方法都...

    SpringAOP整合Hibernate并使用事务

    Spring提供了声明式事务管理,这使得事务管理代码不再需要硬编码到业务逻辑中,而是通过配置来实现。AOP代理可以在方法调用前后自动执行事务相关的操作,如开启、提交、回滚事务,大大提高了代码的整洁度。 3. **...

    springActionScript 3.0

    SpringActionScript 是一个将Spring框架的优秀特性引入ActionScript开发环境的项目,它旨在为ActionScript开发者提供类似Java Spring的依赖注入、AOP(面向切面编程)以及声明式事务管理等功能。本篇将深入探讨...

    Spring AOP源码笔记

    - **线程安全问题**: Spring事务管理在多线程环境下的行为和注意事项。 - **Bean的生命周期和作用域**: 影响事务管理的关键因素,如单例Bean的线程安全性问题。 **7. Spring IOC回顾** - **控制反转(IoC)**: 将...

    java事务 - 使用注解

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过注解或XML配置实现,更易于维护,因此在实际开发中更为常见。`@Transactional`注解就是声明式事务管理的核心。 **3. @...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring API

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    SSM中事务管理所需的jar包-aspectjweaver

    声明式事务管理更易于维护,只需在配置文件或注解中声明事务属性,而无需在业务代码中显式控制事务开始和结束。 2. **AspectJ**:AspectJ是一个强大的AOP框架,它允许开发者定义“切面”,即关注点的模块化,如日志...

    javaweb 通过threadlocal 手动提交事务

    声明式事务管理则通过配置(如Spring的@Transactional注解)来控制事务,降低了代码的耦合度。 3. **ThreadLocal的原理与作用** ThreadLocal为每个线程提供了一个独立的变量副本,各个线程可以独立地改变自己的...

    Spring.NETܲοĵ.rar

    5. **事务管理**:Spring.NET提供了声明式和编程式的事务管理机制,支持各种事务隔离级别和回滚策略,使得事务处理更加一致和可靠。 6. **Web支持**:Spring.NET为ASP.NET提供了强大的Web开发支持,包括Model-View-...

Global site tag (gtag.js) - Google Analytics