spring事务管理,循环插入数据中间一条出错实现回滚。

本文介绍了在Spring中遇到的事务管理问题,特别是当循环插入数据时,在Controller层使用@Transaction无法正常回滚的情况。原因是Controller层在Spring MVC配置文件中被单独扫描,形成独立子容器,导致@Transactional失效。解决方案是将事务管理移到Service层。同时,如果try-catch捕获了异常但未抛出RuntimeException,事务也不会回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  •   使用的是 aop 声明式事务。 但是 循环插入写在 Controller 层中所以一直不能回滚,Controller 层的扫描在 springmvc 的配置文件中使用 
1 // 扫描包下的除了 @Controller  注册到 spring    spring的配置      事务的配置都是在spring的配置文件中的。
2 <context:component-scan base-package="包名">
   3 <context:exclude-filter type="annotation" 4 expression="org.springframework.stereotype.Controller" /> // exclude-filter 过滤掉不扫描的注解 与之对应的是 include-filter 5 </context:component-scan> 6 7 8 // 使用 @RequestMapping 注解是必须开启 annotation-driven 该注解要和扫描controller的注解一起放在spring主配置文件。 9 <mvc:annotation-driven />
  •   Controller 层的扫描是在 springmvc 的配置文件中实现的。 springmvc 也有一个属于自己的子容器,相当于被 spring 容器包裹。 所以这种情况下 在 Controller 中使用 @transactional 会失效,配置切点也会失效。
  •   好的解决方法是将事务在 Service 层进行管理。  有时候 try-catch 捕获了事务异常,如果没有 抛出一个 RuntimeException 也不会进行回滚。

转载于:https://www.cnblogs.com/dengsheng/p/10692003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值