page contents

spring事物相关

Pack 发布于 2020-02-07 18:49
阅读 391
收藏 0
分类:Java开发

spring事物相关

描述:

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(); //调用异常

}

}

274
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(); //调用异常

}

}

请先 登录 后评论