最近项目中碰到了spring的事务失效场景,现在将spring的事务失效的几种场景列举一下:
环境:Springboot2.2.4 (springboot不存在父子容器,所有没有可能是service注册到父容器中导致service无法被代理导致的事务失效)
1.this导致事务失效
代码如下:
controller:controller中autowired了service,常规代码
@Autowired
private User1Service user1Service;
@GetMapping("/test")
public String test(){
user1Service.testTransactionFail();
return null;
}
service: service中发生了方法的嵌套
@Override
public void testTransactionFail() {
User1 user1=new User1();
user1.setId(1);
user1.setName("zs");
//注意这个this
this.innerMethod(user1);
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void innerMethod(User1 user1){
user1Dao.insert(user1);
throw new RuntimeException();
}