@GetMapping("trans")
@Transactional()
public String primaryTrans() {
User u1 = new User(0,"test","test@email.com");
us.save(u1);
User u2 = new User(0,"test1","test1@email.com");
us.save(u2);
secondaryTrans();
return "index";
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
private void secondaryTrans() {
// TODO Auto-generated method stub
User u2 = new User(0,"test2","test3@email.com".repeat(300));
us.save(u2);
}
在这里,我手动从辅助事务引发数据太长异常,但这会导致主事务也回滚。我们如何才能确保提交主事务而不考虑辅助事务
2条答案
按热度按时间bqujaahr1#
在本例中,由于第二个方法是从同一个类调用的,因此很可能不会创建第二个事务。Springs事务支持使用AOP代理创建事务。这些文件包含了关于为什么这不起作用的描述。
dfty9e192#
最简单的方法是捕获从
secondaryTrans()
方法抛出的异常,因此只需将secondaryTrans()
Package 到try-Catch块中: