记录一下
常见1:遇到非检测异常时,事务不开启,也无法回滚。
原因:因为Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。如果想针对非检测异常进行事务回滚,可以在@Transactional 注解里使用rollbackFor 属性明确指定异常。常见2: 在业务层捕捉异常后,发现事务不生效。
原因:在业务层手工捕捉并处理了异常(try…catch)等于把异常“吃”掉了,Spring自然不知道这里有错,更不会主动去回滚数据。推荐做法是在业务层统一抛出异常,然后在控制层统一处理
常见 3 :注解到protected可见度的方法上,事务不生效
原因:@Transactional 注解应该只被应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。
我遇到的不是这种情况,经过排查我的不生效的原因是数数据库引擎为MyISAM ,而MyISAM不支持事务,改为innodbj即可
查询表的引擎
show table status;