Spring事务常见的失效场景说明

欣喜 Spring 发布时间:2024-07-09 09:48:54 阅读数:1493 1
下文笔者讲述Spring中事务失效的场景说明,如下所示

Spring失效的场景说明

1.自调用:
  当类中方法调用本类中另一个方法时
     如果调用时,使用this调用
	 则此时this并不是代理对象
	    而是实际的类实例
		 因此,事务不会生效
  
  优化此问题的方法是
     从Spring的IoC容器中获取该类的代理对象
	  并通过代理对象来调用方法

方法访问权限问题
  Spring要求被代理的方法必须是public
    如果方法不是public的,事务将不会生效
	 此外,如果方法被final修饰
	   Spring的动态代理无法代理final方法,因此事务也会失效。

数据库不支持事务
   某些数据库引擎(如MySQL的MyISAM引擎)不支持事务
     因此即使Spring配置了事务
	  这些操作也不会在事务中执行。

方法没有被Spring管理
   当类没有被Spring管理(即没有添加@Controller、@Service、@Repository等注解)
    则类下面的方法不会被Spring的事务管理器控制
	  因此事务不会生效。

异常处理不当
   如果在事务方法中发生异常
     并且该异常没有被Spring的事务管理器捕获
	  则事务不会回滚
	   此外,对于非RuntimeException(即checked异常)
	    Spring默认不会回滚事务,除非在@Transactional注解中明确指定了rollbackFor属性。

多线程调用
   由于Spring的事务管理是基于ThreadLocal的
    不同线程间的事务是隔离
	 因此,当一个线程中开启事务
	   然后在另一个线程中执行数据库操作,那么这些操作不会参与之前线程的事务。

错误的传播属性
   @Transactional注解有一个propagation属性,用于指定事务的传播行为。如果使用了错误的传播属性,可能导致事务的行为不符合预期。

自定义了回滚异常与事务回滚异常不一致
   如果在@Transactional注解中自定义了回滚的异常类型
     但实际抛出的异常与该类型不匹配,则事务不会回滚
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202407/8127.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者