springboot事务管理 注解@Transactional 无效原因,及解决办法

1.不需要在启动类加上@EnableTransactionManagement,

@EnableTransactionManagement是 spring-tx 的注解,不是 spring-boot 的
spring-boot 会自动配置事务,相关的配置在 org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,在自动配置类里已经写好了 @EnableTransactionManagement

2.正常情况下是直接在方法上使用throw抛出异常,@Transactional直接生效,但是如果想在代码里使用try catch捕获异常,则@Transactional会失效,解决办法如下:两处*必要*配置

@Transactional(rollbackFor = Exception.class)//必要
@Override
public Boolean testTransaction(String param) {
    try {
        deleteXX();
        insertXX();
        return true;
    } catch (Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//必要
        log.error("异常",e);
        return false;
    }
}

 

你可能感兴趣的:(springboot事务管理 注解@Transactional 无效原因,及解决办法)