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事务用在多线程场景中使用不当,也会导致事务无法生效。