Java Springboot 数据库事务实现的几种方式

声明式事务

只需要在方法上面增加Transactional注解即可。

  1. 注解只能应用到 public 方法上才会有效;
  2. 调用当前类如果采用this直接调用注解的方法,会失效。
@Transactional
public void test() {
    //todo
}

编程式事务

对于希望更细粒度的事务管理,希望在方法中,自己控制事务范围,可以采用TransactionManager进行管理。

@Autowired
private PlatformTransactionManager transactionManager;
@Autowired
private TransactionDefinition transactionDefinition;

@Transactional
@Override
public void test() {
    TransactionStatus transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition);
    try {
        //todo
        this.transactionManager.commit(transactionStatus);
    } catch (Exception err) {
        this.transactionManager.rollback(transactionStatus);
    }
}

事务模板

对于上述采用TransactionManager进行管理,发现还需要自己控制事务,并且代码不够整洁,可以采用事务模板。

@Autowired
private TransactionTemplate transactionTemplate;

@Override
public void test() {
    transactionTemplate.execute(transactionStatus -> {
        //todo

        return Boolean.TRUE;
    });
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。