SpringBoot事务设置

注意点:

1.数据库是否为InnoDB引擎

2.配置文件中是否开启

transaction:

  rollback-on-commit-failure: true

3.是否在启动类中加入注解

@EnableTransactionManagement

4.测试问题:

@Transactional注解必须和抛出异常的位置在一起

在Service中加入的事务注解,手动抛出异常时要在Service中抛出,才能看到效果

如果想在Controller中,调用两个不同Service的方法,开启事务回滚,则需要在Controller也加入@Transactional注解

5.@Transactional注解默认只能拦截RuntimeException和Error,如果自定义的Exception,需要如下设置

@Transactional(rollbackFor = Exception.class)

6.在同一个service中 方法调用会使事务,aop失效 

7.@Transactional注解的方法是否为public。

8.@Transactional所注解的方法所在的类,是否已经使用了注解@Service或@Component等。


@Transactional(noRollbackFor=Exception.class)

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW) //使被调用者不受调用者的异常影响,出现异常之后,使父方法回滚,子方法不回滚

@Transactional(rollbackFor = Exception.class,propagation = Propagation.SUPPORTS):支持当前事务,如果当前没有事务,就以非事务方式执行。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED):如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。(默认)。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.MANDATORY):使用当前的事务,如果当前没有事务,就抛出异常。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW):新建事务,如果当前存在事务,把当前事务挂起。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.NOT_SUPPORTED):以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.NEVER):以非事务方式执行,如果当前存在事务,则抛出异常。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.NESTED):如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

@Transactional(rollbackFor = Exception.class,propagation = Propagation.SUPPORTS):支持当前事务,如果当前没有事务,就以非事务方式执行。

//博客参考

springboot 事务的七种传播方式的最全测试讲解_qq_39078783的博客-CSDN博客

你可能感兴趣的:(SpringBoot事务设置)