spring同类方法调用事务使用说明

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#spring声明式事务使用说明:
#前提:
1.springboot 2.0.3.RELEASE
2.application.properties中的配置(默认配置)如下:
spring.aop.auto=true
spring.aop.proxy-target-class=true #是否基于类代理

#说明:
1.如果 save1没有声明事务,那么在 save2/save3上声明的事务,对save1 和 save2/save3都不生效;
2.如果 save1上有声明事务,在 save2/save3上不管是否有事务声明,save1 和 save2/save3都在事务中执行,而且在同一个事务中;
3.跨类调用的方法事务,属于常规方式,这里不做说明;

#以下是示例代码
@Service
public class ClassA {

    @Autowired
    private ClassB classB;

    public void testApi () {
        String status = "2";
        biz.save1(status);
    }
}

public interface ClassB {
    void save1(String status);
    void save2(String status);
}


@Service
public class ClassBImpl implements ClassB {
    @Autowired
    private TableAMapper tableAMapper;

    @Transactional
    @Override
    public void save1(String status) {
        TalbeA info = new TableA();
        info.setName("save1-" + status);
        tableAMapper.insertSelective(info);

        this.save2(status);
        // 或者
        this.save3(status);
    }

    @Transactional
    @Override
    public void save2(String status) {
        TalbeA info = new TableA();
        info.setName("save2-" + status);
        tableAMapper.insertSelective(info);
        
        if (status.equals("2")) {
            throw new RuntimeException("save2.e");
        }

        info = new TableA();
        info.setName("save2-" + status + status);
        tableAMapper.insertSelective(info);
    }
    
    @Transactional
    private void save3(String status) {
        TalbeA info = new TableA();
        info.setName("save3-" + status);
        tableAMapper.insertSelective(info);
        
        if (status.equals("2")) {
            throw new RuntimeException("save3.e");
        }
        
        info = new TableA();
        info.setName("save3-" + status + status);
        tableAMapper.insertSelective(info);
    }

}

 

转载于:https://my.oschina.net/hewenbin/blog/1941361

你可能感兴趣的:(spring同类方法调用事务使用说明)