page contents

spring事物相关

Pack 发布于 2020-02-15 16:44
阅读 427
收藏 0
分类:Java开发

描述:
1 如下所示, 所有的方法都在同一个类中定义(UserService)
2 外部调用methodB方法时, 如果内部执行method3出现异常
那么 methodA方法内部调用后的结果会不会进行回滚?说明原因!

@Service
public class UserService {

//insert操作
public String method1(){
//do something1
}
//update操作
public String method2(){
//do something2
}
//delete操作
public String method3(){
//do something3
}

//添加事务
@Transactional
public void methodA(){
method1();
method2()
}

//添加事务
@Transactional
public void methodB(){
methodA();
method3(); //调用异常
}
}

367
Pack
Pack

执行methodB,由于methodB加了@Transactional注解,所以会执行代理对象的方法,在前置开启事务,并在methodB执行完毕后结束事务,而methodB中调用methodA,此时相当于内部调用methodA,所以不会走事务传播的逻辑,methodA;method3;天然在一个事务,所以method3调用异常,会回滚本次事务的所有操作:method1;method2;method3;均回滚

代码等同于:
@Service
public class UserService {

//insert操作
public String method1(){
//do something1
}
//update操作
public String method2(){
//do something2
}
//delete操作
public String method3(){
//do something3
}

public void methodA(){
method1();
method2()
}

//添加事务
@Transactional
public void methodB(){
methodA();
method3(); //调用异常
}
}

请先 登录 后评论