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异常抛出触发事务回滚策略失效。
分享到:
相关推荐
当一个方法被标记为`@Transactional`时,Spring会自动管理事务的开始、提交或回滚。如果在方法执行过程中出现未捕获的异常,Spring将会回滚事务;反之,如果没有异常,则会提交事务。 二、事务回滚规则 1. **默认...
5. **事务提交或回滚**:如果没有异常,事务会被提交;如果有异常并且配置了回滚规则,事务会被回滚。 在Spring中,可以通过以下几种方式配置事务管理: 1. **XML配置**:在Spring的配置文件中,使用`...
在 Spring 中捕获异常并回滚事务需要我们了解 Spring 的事务机制和 AOP 代理的工作原理。通过使用正确的配置和编码,我们可以轻松地捕获异常并回滚事务。 Spring 异常捕获的原理 在 Spring 中,AOP 代理是如何...
- 事务管理:在方法执行前开启事务,执行后提交或回滚。 - 权限控制:检查用户权限,决定是否允许执行特定操作。 五、总结 Spring的自动代理功能,特别是`BeanNameAutoProxyCreator`,为我们提供了一种灵活的方式,...
当带有此注解的方法被调用时,Spring会自动管理事务的开始、结束、提交和回滚。 - **开始事务**:当方法被调用时,Spring会检测到`@Transactional`,并开启一个新的数据库事务。 - **事务处理**:在方法内部执行的...
在`tx`和`aop`的配合下,Spring会通过AOP代理拦截带有`@Transactional`的方法调用,根据注解中的配置启动一个新的事务,执行方法,如果方法正常结束则提交事务,遇到异常则回滚事务。 在基于Struts1.2和Spring2.0的...
在这个例子中,`@Transactional`注解告诉Spring在`addUser`方法的执行过程中开启和提交一个数据库事务。如果方法抛出异常,事务将被回滚,保证了数据的一致性。 总结来说,Spring的动态代理和AOP是强大的工具,它们...
当调用代理方法时,代理会拦截调用并自动开启、提交或回滚事务,从而实现事务的管理。 #### 配置步骤 1. **定义数据源**:首先,需要在Spring配置文件中定义数据源。数据源是所有数据库交互的基础,这里使用`...
相比之下,声明式事务管理更为简洁,通过在配置文件或注解中声明事务规则,由Spring框架自动处理事务的开始、提交、回滚等操作。 `spring-tx-3.2.0.RELEASE.jar`是Spring事务管理模块的核心库,它包含了Spring对...
声明式事务管理是Spring提供的一种事务管理方式,开发者无需在业务代码中显式调用事务开始、提交、回滚等操作,只需在配置文件或注解中声明事务属性即可。这种方式降低了代码的耦合度,提高了可维护性。 三、配置...
5. **事务管理**:在Service层,使用@Transactional注解开启事务,MyBatis-Spring会自动管理事务的开始、提交或回滚。 总的来说,MyBatis-Spring 1.3.1.jar的使用极大地简化了MyBatis与Spring的集成,使得开发人员...
Spring提供了一种声明式事务管理的方式,通过AOP在需要的地方自动进行事务的开启、提交、回滚等操作,极大地简化了事务处理的代码。 在实际项目中,Spring3.0广泛应用于业务逻辑层(Service)和数据访问层(DAO),...
MyBatis-Spring 可以与 Spring 的事务管理器协同工作,通过声明式事务管理实现事务的回滚和提交。当在 Service 层方法上添加 `@Transactional` 注解时,Spring 会自动管理事务的边界。 4. **依赖注入**: 通过 ...
这个注解只能应用于`public`方法,因为Spring AOP代理无法拦截非`public`方法。如果在`@Transactional`注解的方法内部发生异常,事务将会自动回滚。例如,在Service层中,我们通常会在需要事务控制的方法上添加这个...
例如,通过定义一个切面类,包含前置通知记录方法调用日志,后置通知处理事务提交或回滚,以及异常通知进行异常处理。 四、实战案例 以下是一个简单的Spring AOP使用示例: ```java @Aspect public class ...
例如,在Service层的方法上添加此注解,Spring会在方法执行前后自动处理事务的开启和提交,如果方法中发生异常,Spring会回滚事务。这种方式大大简化了代码,避免了手动管理事务的复杂性。同时,Spring还提供了编程...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们可以实现如日志记录、事务...
2. 事务管理器(TransactionManager):处理事务的开始、提交、回滚等操作,如HibernateTransactionManager适用于Hibernate环境。 3. 代理机制:Spring通过代理模式来实现事务管理,包括AOP(面向切面编程)代理。 ...
MyBatis-Spring提供了一个SqlSessionTemplate类,它封装了对SqlSession的管理,包括打开、关闭SqlSession以及事务的提交和回滚。通过配合Spring的事务管理,可以在Service层的业务逻辑中进行全局的事务控制。 总结...
Spring框架提供了强大的事务管理机制,使得开发者能够方便地控制事务的开启与提交。然而,在实际开发过程中,经常会遇到一些关于Spring事务的问题,如事务失效、事务回滚、大事务问题以及编程式事务等。本文将深入...