Spring 事务失效的几种情况

目录

1. 事务方法不是public

2. 自调用问题

3. 异常处理不当

4. 数据源或事务管理器配置错误

5. 事务传播行为不当

6. 代理方式不正确

7. 事务同步问题


1. 事务方法不是public

   在Spring中,默认情况下,只有public方法上的@Transactional注解才会被代理对象识别并应用事务。如果在非public方法上使用@Transactional,事务可能不会被正确处理。

2. 自调用问题

   当一个对象内部的一个事务方法被该对象内的另一个方法调用时,事务不会起作用。这是因为事务的应用是通过代理实现的,而自调用并不通过代理。

3. 异常处理不当

   Spring事务默认只对运行时异常(RuntimeException及其子类)和错误(Error)进行回滚,如果方法中抛出的是检查型异常(Exception的其他子类),且没有在@Transactional注解的rollbackFor属性中指定对这些异常进行回滚,则事务不会回滚。

4. 数据源或事务管理器配置错误

    如果数据源或事务管理器没有正确配置,或者方法使用的数据源没有事务管理的能力,比如使用了简单的JDBC数据源而不是支持事务的数据源,那么事务将不会工作。

5. 事务传播行为不当

    Spring提供了多种事务传播行为Spring 事务传播行为,如果选择的传播行为不适合当前的业务场景,可能会导致事务失效。例如,将方法标记为PROPAGATION_SUPPORTS,但该方法实际上是非事务性执行的。

6. 代理方式不正确

    如果Spring的配置中使用了基于接口的JDK代理而方法实现在类中而不是接口,或者需要使用基于类的代理(CGLIB)却没有正确配置,事务可能不会被应用。

7. 事务同步问题

   如果在事务方法中进行了线程切换,比如使用了@Async注解进行异步调用,事务上下文可能不会传播到新线程中,导致事务失效。

相关推荐

  1. Spring事务失效情况

    2024-05-03 10:20:09       46 阅读
  2. Spring 事务失效情况

    2024-05-03 10:20:09       11 阅读
  3. spring 事务失效场景

    2024-05-03 10:20:09       8 阅读
  4. Spring事务失效场景

    2024-05-03 10:20:09       12 阅读
  5. Spring事务失效场景

    2024-05-03 10:20:09       10 阅读
  6. 索引失效 12 情况

    2024-05-03 10:20:09       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 10:20:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 10:20:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 10:20:09       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 10:20:09       20 阅读

热门阅读

  1. Vue 基础汇总

    2024-05-03 10:20:09       13 阅读
  2. Map实现(2)| LinkedHashMap

    2024-05-03 10:20:09       10 阅读
  3. 生物样品培养

    2024-05-03 10:20:09       9 阅读
  4. 【杂谈】空格还是Tab?

    2024-05-03 10:20:09       12 阅读
  5. 前端工程化的基本介绍

    2024-05-03 10:20:09       11 阅读
  6. 简要描述Nacos是什么以及它的主要用途。

    2024-05-03 10:20:09       12 阅读
  7. React Context

    2024-05-03 10:20:09       12 阅读
  8. ffmpeg 转换es流成为ps流

    2024-05-03 10:20:09       13 阅读