加载中...
加载中...
@Transactional失效场景

@Transactional失效场景 原创


声明式事务@Transactional失效场景

1、数据库引擎设置不对造成的。

说明:比如我们最常用的mysql,引擎MyISAM,是不支持事务操作的。需要改成InnoDB才能支持。

2、入口的方法必须是public,否则事务不起作用。

说明:这一点由Spring的AOP特性决定的,理论上而言,不public也能切入,但spring可能是觉得private自己用的方法,应该自己控制,不应该用事务切进去吧)。另外private 方法, final 方法 和 static 方法不能添加事务,加了也不生效。

3、Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚

说明:为什么spring要这么设计?因为spring认为Checked的异常属于业务的,coder需要给出解决方案而不应该直接扔该框架。

4、类是否被代理了

说明:因为spring的事务实现原理为AOP,只有通过代理对象调用方法才能被拦截,事务才能生效。



Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。

@EnableTransactionManagement 等同于xml配置方式的 <tx:annotation-driven />  


没有更多推荐了 [去首页]
image
文章
357
原创
284
转载
73
翻译
0
访问量
199063
喜欢
47
粉丝
6
码龄
5年
资源
0

文章目录

加载中...
0
0