spring事务的一些失效
- 自调用 这样会导致事务失效
- 被调用方法的事务传播行为设置为PROPAGATION_REQUIRES_NEW
- 使用 nested 传播级别 + 手动捕获异常 实现小事务抛出异常独立回滚而大事务仍然可以提交
- 嵌套的@Transactional
- propagation = Propagation.REQUIRES_NEW用法
- private的声明这样会导致事务失效
- 自调用这样会导致事务失效
- 事务没有在controller层去捕获
- 自己注入自己的情况
- 在controller层进行捕获
- 未能捕获Exception级别的异常这样会导致事务失效
- 遇到异常设置手动回滚
- 设置合适的回滚异常
- 父子容器扫描范围导致的事务失效
- 多线程修改和查询会导致事务失效
- 多线程下保证事务生效
spring事务的情况
主异常
主回滚,从不回滚 (@Transactional,@Transactional(propagation = Propagation.REQUIRES_NEW))
主回滚,从回滚(@Transactional,@Transactional)
从异常
从回滚,主不回滚 (@Transactional,@Transactional(propagation = Propagation.NESTED)) 要注意try catch捕获,最好是在抛异常的前面捕获
从回滚,主回滚 (@Transactional,@Transactional)
主 @Transactional 从 @Transactional 主异常 主从一起回滚 从异常 主从一起回滚
主 @Transactional 从 @Transactional(propagation = Propagation.REQUIRES_NEW)
主异常 主回滚从正常插入 从异常主则要回滚,从要回滚
主 @Transactional 从 @Transactional(propagation = Propagation.NESTED)
主异常 主从一起回滚 从异常 不影响主异常的插入
自调用 这样会导致事务失效
被调用方法的事务传播行为设置为PROPAGATION_REQUIRES_NEW
使用 nested 传播级别 + 手动捕获异常 实现小事务抛出异常独立回滚而大事务仍然可以提交
嵌套的@Transactional
propagation = Propagation.REQUIRES_NEW用法
private的声明这样会导致事务失效
自调用这样会导致事务失效
事务没有在controller层去捕获
自己注入自己的情况
在controller层进行捕获
未能捕获Exception级别的异常这样会导致事务失效
遇到异常设置手动回滚
设置合适的回滚异常
父子容器扫描范围导致的事务失效
多线程修改和查询会导致事务失效
多线程下保证事务生效
这样同步抛出异常,异步抛出异常均能正常回滚