spring 事务

一.事务的传播机制

1.REQUIRED: 如果当前方法没有事务,新建一个事务,如果已经存在一个事务中,则加入到这个事务中。
2.SUPPORTS :支持当前事务,如果当前没有事务,就以非事务方式执行
3.MANDATORY :使用当前的事务,如果当前没有事务,就抛出异常。
4.REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
5.NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7.NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与REQUIRED类似的操作。

二.事务的失效场景

1、事务方法访问修饰符非public,导致事务失效
如果标注了事务的方法,不是public修饰的,就会导致事务失效

2、抛出的异常不在事务异常捕捉范围内
事务默认只对出现运行期异常(java.lang.RuntimeException及其子类),Error进行回滚。如果你抛出Exception 则就捕捉不到这个异常,而导致事务回滚失效。
3.数据表本身是不支持事务,导致事务失效
如果数据库不支持事务,就是釜底抽薪,事务肯定就失效了。
4.所在的类没有被spring管理,导致事务失效
因为事务时aop的形式去处理的,如果不被spring容器管理,则会导致注解失效,事务也就失效了。
5.数据源没有配置事务管理器,导致事务失效
6.传播类型不支持事务,导致事务失效
如果传播机制是上述的 NEVER、NOT_SUPPORTED、SUPPORTS ,就会导致没有事务。

三.事务的嵌套

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容