`

spring 代理service 回滚 部分提交

阅读更多
try catch异常抛出与spring事务回滚策略相关(转)2011-06-20 10:44:47|  分类: Spring事务管理 |  标签: |字号大中小 订阅 .

      在配置了事务代理的Service业务逻辑实现类的方法里,若将异常捕获,并且在catch块中不对事务做显式提交(或其他应该做的操作如关闭资源等)=生吞掉异常;
spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtime异常或unchecked异常)。
      如果抛出runtime exception 并在你的业务方法中没有catch到的话,事务会回滚。
      一般不需要在业务方法中catch异常,如果非要catch,在做完你想做的工作后(比如关闭文件等)一定要抛出runtime exception,否则spring会将你的操作commit,这样就会产生脏数据。所以你的catch代码是画蛇添足。

由此可以推知,在spring中如果某个业务方法被一个

     try {   
            //bisiness logic code  

          } catch(Exception e) {  

             //handle the exception  

整个包裹起来,则这个业务方法也就等于脱离了spring事务的管理,因为没有任何异常会从业务方法中抛出!全被捕获并吞掉,导致spring异常抛出触发事务回滚策略失效。
分享到:
评论

相关推荐

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

    当一个方法被标记为`@Transactional`时,Spring会自动管理事务的开始、提交或回滚。如果在方法执行过程中出现未捕获的异常,Spring将会回滚事务;反之,如果没有异常,则会提交事务。 二、事务回滚规则 1. **默认...

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

    5. **事务提交或回滚**:如果没有异常,事务会被提交;如果有异常并且配置了回滚规则,事务会被回滚。 在Spring中,可以通过以下几种方式配置事务管理: 1. **XML配置**:在Spring的配置文件中,使用`...

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

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

    Spring实现自动代理Demo

    - 事务管理:在方法执行前开启事务,执行后提交或回滚。 - 权限控制:检查用户权限,决定是否允许执行特定操作。 五、总结 Spring的自动代理功能,特别是`BeanNameAutoProxyCreator`,为我们提供了一种灵活的方式,...

    后端 Java Spring Data Jpa @Transactional 介绍

    当带有此注解的方法被调用时,Spring会自动管理事务的开始、结束、提交和回滚。 - **开始事务**:当方法被调用时,Spring会检测到`@Transactional`,并开启一个新的数据库事务。 - **事务处理**:在方法内部执行的...

    spring 事务管理例子(TransactionProxyFactoryBean代理机制 和 tx/aop)

    在`tx`和`aop`的配合下,Spring会通过AOP代理拦截带有`@Transactional`的方法调用,根据注解中的配置启动一个新的事务,执行方法,如果方法正常结束则提交事务,遇到异常则回滚事务。 在基于Struts1.2和Spring2.0的...

    Spring 动态代理和aop切面编程例子

    在这个例子中,`@Transactional`注解告诉Spring在`addUser`方法的执行过程中开启和提交一个数据库事务。如果方法抛出异常,事务将被回滚,保证了数据的一致性。 总结来说,Spring的动态代理和AOP是强大的工具,它们...

    spring 事务代理配置

    当调用代理方法时,代理会拦截调用并自动开启、提交或回滚事务,从而实现事务的管理。 #### 配置步骤 1. **定义数据源**:首先,需要在Spring配置文件中定义数据源。数据源是所有数据库交互的基础,这里使用`...

    Spring事务管理的jar包

    相比之下,声明式事务管理更为简洁,通过在配置文件或注解中声明事务规则,由Spring框架自动处理事务的开始、提交、回滚等操作。 `spring-tx-3.2.0.RELEASE.jar`是Spring事务管理模块的核心库,它包含了Spring对...

    Spring ax/aop声明式事务配置实例

    声明式事务管理是Spring提供的一种事务管理方式,开发者无需在业务代码中显式调用事务开始、提交、回滚等操作,只需在配置文件或注解中声明事务属性即可。这种方式降低了代码的耦合度,提高了可维护性。 三、配置...

    mybatis-spring-1.3.1.jar下载

    5. **事务管理**:在Service层,使用@Transactional注解开启事务,MyBatis-Spring会自动管理事务的开始、提交或回滚。 总的来说,MyBatis-Spring 1.3.1.jar的使用极大地简化了MyBatis与Spring的集成,使得开发人员...

    Spring3.0学习文档

    Spring提供了一种声明式事务管理的方式,通过AOP在需要的地方自动进行事务的开启、提交、回滚等操作,极大地简化了事务处理的代码。 在实际项目中,Spring3.0广泛应用于业务逻辑层(Service)和数据访问层(DAO),...

    mybatis-spring-1.2.3.zip

    MyBatis-Spring 可以与 Spring 的事务管理器协同工作,通过声明式事务管理实现事务的回滚和提交。当在 Service 层方法上添加 `@Transactional` 注解时,Spring 会自动管理事务的边界。 4. **依赖注入**: 通过 ...

    SpringBoot的事务使用和回滚功能讲解.docx

    这个注解只能应用于`public`方法,因为Spring AOP代理无法拦截非`public`方法。如果在`@Transactional`注解的方法内部发生异常,事务将会自动回滚。例如,在Service层中,我们通常会在需要事务控制的方法上添加这个...

    spring-aop.jar

    例如,通过定义一个切面类,包含前置通知记录方法调用日志,后置通知处理事务提交或回滚,以及异常通知进行异常处理。 四、实战案例 以下是一个简单的Spring AOP使用示例: ```java @Aspect public class ...

    spring分别与jdbc和hibernate结合的事务控制--案例

    例如,在Service层的方法上添加此注解,Spring会在方法执行前后自动处理事务的开启和提交,如果方法中发生异常,Spring会回滚事务。这种方式大大简化了代码,避免了手动管理事务的复杂性。同时,Spring还提供了编程...

    Spring Aop使用实例

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们可以实现如日志记录、事务...

    Spring xml 配置案例

    2. 事务管理器(TransactionManager):处理事务的开始、提交、回滚等操作,如HibernateTransactionManager适用于Hibernate环境。 3. 代理机制:Spring通过代理模式来实现事务管理,包括AOP(面向切面编程)代理。 ...

    mybatis_spring(mapper代理开发方法的整合整合项目)

    MyBatis-Spring提供了一个SqlSessionTemplate类,它封装了对SqlSession的管理,包括打开、关闭SqlSession以及事务的提交和回滚。通过配合Spring的事务管理,可以在Service层的业务逻辑中进行全局的事务控制。 总结...

    spring事务总结.docx

    Spring框架提供了强大的事务管理机制,使得开发者能够方便地控制事务的开启与提交。然而,在实际开发过程中,经常会遇到一些关于Spring事务的问题,如事务失效、事务回滚、大事务问题以及编程式事务等。本文将深入...

Global site tag (gtag.js) - Google Analytics