for循环内的事物处理

for循环内的事物回滚问题

**问题:**在for循环事务,每个for循环中的代码要单独回滚单独提交,不能影响外部代码环境。

解决办法
将循环内逻辑抽离出一个新的方法,单独添加事物并设置新方法事物的传播行为为Propagation.REQUIRES_NEW,然后在循环内调用方法。
Propagation.REQUIRES_NEW传播行为是如果调用者当前有事务,就将事务挂起,重新开启事务。这样调用这个方法后,这个方法单独开启事务,每次执行完,单独提交,遇到异常单独回滚,外部方法收到抛出的异常并不处理就好,这样内外事务互不影响。

注意:
新方法不能和循环方法在同一个类,否者被调用方法的事物声明会不起效。
原因是声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
而对象内部的自我调用将无法实施切面中的增强,所以被调用方法的事物不生效。

发布了56 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xs925048899/article/details/104536139