Onk*_*ade 2 java spring transactions spring-boot
当我从另一个事务方法调用一个事务方法,现在我的第二个事务方法完成,又回到第一个事务方法时,会发生什么,不幸的是它失败了,所以它将回滚所有内容,这意味着它将回滚第二个事务方法的更改.. ?? 注意:两种方法都在同一个类中
@Transactional
public void method1(){
//do something
call method2();
//do something
...
...
failed here
}
@Transactional
public void method2(){
//do something
save()
}
Run Code Online (Sandbox Code Playgroud)
因此,在上面的示例中,它会回滚我在第二个事务处理方法中保存的内容吗?
它取决于txType。默认情况下是必需的。因此,第一个方法启动事务,并且对method2的调用使用相同的事务。
还要注意,同一对象内的方法调用不会触发事务处理。通常,事务处理作为代理处理,仅在调用注入的其他bean时起作用。在您的示例中,您不会发现任何区别。
如果method1不是@Transactional而method2是,则这很重要。在这种情况下,将根本没有交易。
如果两个方法都在同一个类中,从同一个类的另一个方法调用@Transactional时甚至不会考虑注释。你在那里放了什么并不重要,即使你把它放在外面。仍然会有一个由 启动的事务,但是你会被困在那个事务中。method1()
如果第二种方法在一个单独的类中,您可以使用Propagation.REQUIRES_NEW它在自己的事务中运行,这意味着即使method1()稍后失败,method2()仍然会进行任何更改。
REQUIRED如果不存在,则默认事务传播将启动新事务,或加入现有事务。同样,在单独的类情况下,它会导致在失败method2()时所做的任何更改的回滚method1()。