问题:
spring 事务传播行为NOT_SUPPORTED的描述是声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。如果现在我的service层一个方法 (比如说方法名叫save)开启了事务,然后在这个方法里面开了另一个线程 T,这个线程 T 我不想让他受这个事务的控制,我用了NOT_SUPPORTED,那么,当save运行到调用这个线程T的时候save这个方法所在的事务提交了吗?save方法里对数据库的操作提交了吗?T线程里的方法如果对save操作的数据库数据做操作,那么操作的数据是脏数据吗?
回答1:
你的意识就是,有个方法A (开启了事务),并在方法A中新开线程B(想B的事务与A为独立);
如果你在B使用 NOT_SUPPORTED 是不对的,应该使用 RROPAGATION_REQUIRES_NEW(独立事务)按照你的意识,你的新开线程B加上了NOT_SUPPORTED就已经没有事务了,你应该手动提交,应该是不会产生脏数据的,save方法对当时不会提交应该手动提交一下就可以了,这样比较放心,或者使用事务独立(RROPAGATION_REQUIRES_NEW)A与B完全无关;
回答2:
这篇文章说的挺详细的,也可以自己试一试的https://blog.csdn.net/yuanlaishini2010/article/details/45792069
回答3:
事实说明不会影响
标签: