Spring 事务什么时候会失效?

简介: Spring 事务什么时候会失效?

Spring 事务的原理其实就是 AOP,进行切面增强,用到了代理对象,失效的根本原因是 AOP 不起作用了!常见情况如下:

(1)发生自调用,类里面使用 this 调用本类的方法(this 通常省略),而 this 对象不是代理类,而是(UserService)类本身的对象,没有用到代理类。

解决方法很简单,让 this 变成(UserService)类的代理类即可。

(2)方法不是 public 的

@Transactional 只能用在 public 的方法上,否则事务不会生效;如果要用在非 public 方法上,可以开启 AspectJ 代理模式。

(3)数据库不支持事务

Spring 本身是基于数据库的事务,所以如果数据库不支持事务,Spring 也不支持,如 MySQL 中的 MyISAM 类型

(4)没有被 Spring 管理

比如没有在类上加 @Component、@Autowire 等注解,没有把对象放在容器中,只加 @Transactional 没作用。

(5)异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为 RuntimeException)

相关文章
|
22天前
|
Java 数据库 开发者
|
3天前
|
Java 关系型数据库 MySQL
【JavaEE进阶】Spring中事务的实现
【JavaEE进阶】Spring中事务的实现
|
8天前
|
Java 关系型数据库 MySQL
Spring 事务和事务传播机制
Spring 事务和事务传播机制
Spring 事务和事务传播机制
|
9天前
|
Java 关系型数据库 MySQL
Spring 事务和事务传播机制
Spring 事务和事务传播机制
|
9天前
|
Java 数据库 Spring
Spring 事务
Spring 事务
19 1
|
9天前
|
Java 数据库 Spring
Spring 事务 (编程式 & 声明式, Spring 事务传播机制)
Spring 事务 (编程式 & 声明式, Spring 事务传播机制)
20 1
|
12天前
|
Java 数据库连接 Spring
Spring事务
Spring事务
19 1
|
22天前
|
Java 关系型数据库 MySQL
【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
19 0
|
22天前
|
消息中间件 Java 关系型数据库
【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用
【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用
28 0
|
22天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
21 1