背景
平台功能,有插入数据部分丢失的情况;经初步定位是因为多次入库操作没有在一个事务内进行
解决过程
利用Spring transactional注解对service中操作入库的操作方法添加注解;添加完成之后,测试发现,事务没有生效。what?
然后进行事务没有生效的原因定位;
1、检查事务的传播方式,项目默认的传播行为;
项目的默认传播行为,PROPAGATION_REQUIRED,符合业务应用场景
2、经排查发现,有部分方法异常被catch住,没有把异常抛出,导致不能检查异常,从而不会回滚
修改方法,把捕获的异常重新抛出;测试发现,异常抛出后,事务仍然没有生效,抛出异常后 ,DB依然没有回滚,什么情况?继续排查
3、@Transactional 只对 public修饰上生效,其他修饰不起作用
排查,没有问题,所有的注解的方法都是public方法
4、默认情况下此注解会对unchecked异常进行回滚,对checked异常不回滚。
所有如果想要对checked异常也进行事务回滚,需要制定transactional 回滚类型 rollback = Exception.class; 这样,会对捕获的所有异常都进行回滚;实测,依然不生效,此时,我心态有点不好了,哈哈,但是依然没有放