Spring事务失效的常见场景学生来看

如题所述

JavaSpring 八种常见失效场景

1.事务方法未被Spring管理

如果事务方法所在的类没有注册到Spring IOC容器中,也就是说,事务方法所在类并没有被Spring管理,则Spring事务会失效

2.方法使用final类型修饰

有时候,某个方法不想被子类重新,这时可以将该方法定义成final的。普通方法这样定义是没问题的,但如果将事务方法定义成final,例如:

3.非public修饰的方法

如果事务方式不是public修饰,此时Spring事务会失效,举个例子

4.同一个类中的方法相互调用

5,方法的事务传播类型不支持事务

如果内部方法的事务传播类型为不支持事务的传播类型,则内部方法的事务同样会在Spring中失效,举个例子

6.未配置开启事务

如果项目中没有配置Spring的事务管理器,即使使用了Spring的事务管理功能,Spring的事务也不会生效,例如,如果你是Spring Boot项目,没有在SpringBoot项目中配置如下代码

7.错误的传播特性

其实,我们在使用@Transactional注解时,是可以指定propagation参数的。该参数的作用是指定事务的传播特性,目前Spring支持4种传播特性:

REQUIRED如果当前上下文中存在事务,那么加入该事务,如果不存在事务,创建一个事务,这是默认的传播属性值。

SUPPORTS如果当前上下;文存在事务,则支持事务加入事务,如果不存在事务,则使用非事务的方式执行。

MANDATORY如果当前上下文中存在事务,否则抛出异常。

REQUIRES_NEW每次都会新建一个事务,并且同时将上下文中的事务挂起,执行当前新建事务完成以后,上下文事务恢复再执行。

8,多线程调用

在实际项目开发中,多线程的使用场景还是挺多的。如果Spring事务用在多线程场景中使用不当,也会导致事务无法生效。

温馨提示:答案为网友推荐,仅供参考
相似回答