配置了事务
@Transactional(value = "transactionManager",propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void deductStock(List<OrderLines> lines) {}
但是无论如何,失败后都不回滚。
最终知道问题出在哪里了。
原来我们公司的框架在insert的sql中加入了下面这句坑爹的sql:
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
就被强制提交了,如果你能看到日志可以看到有一个Fetched动作。就被这样无情坑了。
修改办法 ,在insert标签中加入返回主键的设置:
<insert id="insert" parameterType="orderHeaders" useGeneratedKeys="true" keyProperty="id" >
若是别的问题,在网上找不到就建议打开日志,细细看日志是怎么开启事务、提交、回滚的。这些都可以追踪到。
相关推荐
首先,`@Transactional`是Spring提供的一个编程式事务管理方式,它允许我们在方法上声明事务属性,如传播行为、隔离级别、读写模式以及是否回滚。例如: ```java @Service public class UserService { @...
需要注意的是,`@Transactional`注解只能对Spring管理的bean起作用,对于非Spring管理的对象(如静态方法或第三方库的代码),`@Transactional`将无法控制事务。 六、异常处理与事务回滚 理解异常处理与事务回滚的...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
在Java后端开发中,Spring框架提供了强大的事务管理能力,特别是在使用Spring Data JPA时,`@Transactional`注解使得事务处理变得简单易用。这个注解是Spring框架中的核心部分,它允许开发者声明性地控制事务边界,...
在Spring框架中,`@Transactional`注解是一个强大的工具,用于声明式地管理事务。它使得开发者无需显式地在代码中控制事务的开始、提交和回滚,从而提高了代码的可读性和可维护性。下面我们将深入探讨`@...
Spring @Transactional 注解失效解决方案 在 Spring 框架中,@Transactional 注解是用于管理事务的关键工具之一。但是,在实际开发中,我们经常会遇到 @Transactional 注解失效的问题。本篇文章将详细介绍 @...
- `@Transactional`注解并不直接处理异常,而是通过Spring的AOP代理来决定是否回滚事务。默认情况下,运行时异常(如`RuntimeException`)会触发回滚,而检查异常(非运行时异常)则不会。 - 可以自定义回滚规则,...
2. 默认回滚机制:Spring 基于注解的声明式事物 @Transactional 默认情况下只会对运行期异常(java.lang.RuntimeException 及其子类)和 Error 进行回滚。 3. 数据库引擎支持:数据库引擎要支持事务,使用 InnoDB。 ...
Spring默认只在遇到未检查异常时自动回滚事务,如果需要在特定检查异常下回滚,可以在`@Transactional`注解中指定`rollbackFor`属性。 5. 测试:创建一个测试类,模拟一个业务流程,使得在事务中发生异常,观察事务...
13. **非Spring管理的对象**:如果一个类不是由Spring管理的,而是通过new关键字创建的,那么这个类的方法上的`@Transactional`注解将无效,因为Spring无法通过AOP代理来处理这些方法。 了解以上这些情况并避免它们...
总的来说,Spring的`@Transactional`注解为开发者提供了方便且强大的声明式事务管理能力。它简化了事务控制,让开发者能够专注于业务逻辑,而无需关心事务的细节。尽管编程式事务管理可以提供更细粒度的控制,但声明...
本教程将深入探讨如何在Spring中实现自定义事务管理器、编程式事务处理以及声明式事务`@Transactional`的使用。 首先,让我们了解事务管理的基本概念。事务是一组数据库操作,这些操作要么全部执行,要么全部回滚,...
2. 调整注解使用:如果循环依赖无法避免,可以考虑将`@Transactional`和`@Async`注解分开,不要同时应用于同一个方法。例如,可以将事务管理应用于一组服务方法,而将异步执行应用于另一组方法。 3. 修改配置:在...
【Spring的@Transactional注解用法解读】 事务管理是企业级应用程序中的关键部分,它确保了在发生异常时数据的一致性。Spring框架提供了一种统一的方式来处理事务管理,包括对不同事务API(如JTA、JDBC、Hibernate...
但是,如果在同一个类中的其他方法调用有@Transactional注解的方法时,Spring不会生成代理对象,导致事务不生效。 例如,以下代码中,dosome()方法上有@Transactional注解,但是如果在action()方法中调用dosome(),...
可以研究Spring的TransactionInterceptor拦截器是如何根据@Transactional注解来决定事务的开始、提交或回滚的,以及PlatformTransactionManager的实现类如DataSourceTransactionManager如何与数据库的事务进行交互。...
然而,如果`methodB`的异常没有被捕获并重新抛出,而是被忽略或者处理了,那么Spring可能无法检测到这个异常,从而不会回滚`methodA`的事务。因此,捕获并重新抛出异常是至关重要的,如示例代码所示。 此外,需要...
"Transactional:Spring事务性Junit测试"是一个关于如何在JUnit测试中利用Spring的事务管理特性的主题。 首先,让我们理解Spring中的事务管理。Spring提供了一种声明式和编程式的事务管理方式。声明式事务管理通过在...