关于@Transactional的事务设置:下面有测试参考
注意点:
1.数据库是否为InnoDB引擎
2.配置文件中是否开启
transaction:
rollback-on-commit-failure: true
3.是否在启动类中加入注解
@EnableTransactionManagement
4.一些测试问题:
@Transactional注解位置和抛出异常的位置需要在一起
如果想在Controller中,调用两个不同Service中的方法,想要开启事务回滚,则需要在Controller也加入@Transactional注解
5.@Transactional注解默认只能拦截RuntimeException和Error,如果自定义的Exception,需要如下设置
@Transactional(rollbackFor = Exception.class)
6.@Transactional在同一个service中 父方法调用子方法会使事务失效
事务以第一个方法(父方法)的事务配置为准,第二个方法的事务配置是失效的
7.@Transactional注解的方法是否为public。
8.@Transactional所注解的方法所在的类,是否已经使用了注解@Service或@Component等。
例:使被调用者不受调用者的异常影响,出现异常之后,使父方法回滚,子方法不回滚
@Transactional(noRollbackFor=Exception.class)
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW