首页 新闻 会员 周边 捐助

spring 事务传播NOT_SUPPORTED

0
悬赏园豆:100 [已解决问题] 解决于 2018-12-05 15:59

spring 事务传播行为NOT_SUPPORTED的描述是声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。如果现在我的service层一个方法 (比如说方法名叫save)开启了事务,然后在这个方法里面开了另一个线程 T,这个线程 T 我不想让他受这个事务的控制,我用了NOT_SUPPORTED,那么,当save运行到调用这个线程T的时候save这个方法所在的事务提交了吗?save方法里对数据库的操作提交了吗?T线程里的方法如果对save操作的数据库数据做操作,那么操作的数据是脏数据吗?

LittleAnts的主页 LittleAnts | 初学一级 | 园豆:4
提问于:2018-05-17 15:21
< >
分享
最佳答案
0

你的意识就是,有个方法A (开启了事务),并在方法A中新开线程B(想B的事务与A为独立);
如果你在B使用 NOT_SUPPORTED 是不对的,应该使用  RROPAGATION_REQUIRES_NEW(独立事务)按照你的意识,你的新开线程B加上了NOT_SUPPORTED就已经没有事务了,你应该手动提交,应该是不会产生脏数据的,save方法对当时不会提交应该手动提交一下就可以了,这样比较放心,或者使用事务独立(RROPAGATION_REQUIRES_NEW)A与B完全无关;

收获园豆:100
DanBrown | 小虾三级 |园豆:1321 | 2018-05-17 16:28

我的想法是线程T不需要事务,他实际上是要查询save方法保存到数据库的数据,并不需要事务的控制。你的意思是save方法还是需要手动提交吗?还是说他自己在走完这个线程调用方法之后自己就提交了呢?

LittleAnts | 园豆:4 (初学一级) | 2018-05-18 09:22

@ʚ飞累的荆棘鸟√: 你可以分别测试一下,一个加上手动提交,一个不加,看看数据库里到底有没有数据

DanBrown | 园豆:1321 (小虾三级) | 2018-05-18 09:24
其他回答(2)
0

这篇文章说的挺详细的,也可以自己试一试的https://blog.csdn.net/yuanlaishini2010/article/details/45792069

让我发会呆 | 园豆:2929 (老鸟四级) | 2018-05-18 08:45
0

事实说明不会影响

LittleAnts | 园豆:4 (初学一级) | 2018-05-25 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册