我对弹簧交易传播有疑问。如果我使用 @Transactional(propagation = Propagation.REQUIRED) 来注释方法m1。当执行逻辑输入m1时,如果已有事务,则m1将使用该事务。在m1之后,交易怎么样?它结束或仍然打开?(如果我在另一个方法中调用m1,并且在调用之后还有其他事情要做)。
总之,我想知道退出带注释的方法时,交易结束还是仍然开放?</ p>
非常感谢。
答案 0 :(得分:19)
Propagation.REQUIRED
(记录here)将创建一个新事务(如果当前线程不存在),或者将加入现有事务(如果存在)。
当方法退出时,交易将完成(如果输入方法导致创建交易),或将使交易保持打开(如果在输入方法时已经存在交易)。换句话说,它是对称的,并且会使线程的事务状态处于输入方法之前的状态。