springboot事务使用


1、事务传播-Propagation

/*例如:Propagation.REQUERED
* 属性:REQUIRED
* SUPPORTS
* MANDATORY
* REQUIRES_NEW
* NOT_SUPPORTED
* NEVER
* NESTED
* */
属性:
REQUIRED:使用当前的事务,如果没有事务,则自己新建一个事务。子方法必须运行一个事务,如果父方法有事务,则加入这个事务形成一个整体。
SUPPORTS:如果当前有事务则使用事务,如果当前没有事务则不使用事务。
MANDATORY:该属性必须存在一个事务,如果不存在,则抛出异常。
REQUIRES_NEW:如果当前有事务则挂起该事务,并且创建一个新事务自己使用。
NOT_SUPPORTED:如果当前有事务,则把事务挂起,则自己不使用事务去操作数据库。
NEVER:如果当前有事务存在,则抛出异常。

2、开启事务,使用@Transactional 注解

 @Transactional(propagation = Propagation.REQUIRED )
    @Override
    public void queryUser() {
       saveUser1();
       int a = 1 / 0;
       saveUser2();
    }

    public void saveUser1(){
        Users users=new Users();
        users.setTsId("TsId3");
        users.setTsCash(100);
        users.setTsKey("TsKey1");
        usersMapper.insert(users);
    }
    public void saveUser2(){
        Users users=new Users();
        users.setTsId("TsId4");
        users.setTsCash(200);
        users.setTsKey("TsKey2");
        usersMapper.insert(users);
    }

  开启事务后,程序报错后,事务回滚