Spring事务失效场景

Spring事务失效场景

  1. 数据库不支持事务

    • 比如MySQL数据库的MyISAM存储引擎
  2. 事务方法未被Spring管理

    • 使用Spring注解@Transactional进行事务管理的方法所在的类没有在Spring IOC容器的管理中。
  3. 事务方法不是public修饰符

    • Spring对事务方法时通过AOP实现的,只对public方法进行处理。
  4. 同一个类中没有事务声明的方法调用被声明事务的方法

    • Spring对事务方法时通过AOP实现的,如果最外层方法没有被事务声明时,即时被直接调用的同一个类中的方法上面存在事务,也不会生效。
    • 如果外层的方法上面有事务,直接调用的同一个类中的方法上面即时有事务,也不会直接生效。最终是被外层方法的事务控制。
  5. 未配置事务管理器

    • 如果在项目中没有配置Spring的事务管理器,Spring的事务也不会生效。

      @Bean
      public PlatformTransactionManager transactionManager(DataSource dataSource) {
       return new DataSourceTransactionManager(dataSource);
      }
      
  6. 方法的事务传播类型不支持事务

    • 如果内部方法的事务传播类型为不支持事务的传播类型,内部方法就不会被Spring的事务管理

      @Service
      public class OrderService {
       @Autowired
       private OrderDao orderDao;
       @Autowired
       private ProductDao productDao;
      
       @Transactional(propagation = Propagation.REQUIRED)
       public void submitOrder(){
        //生成订单
        Order order = new Order();
        long number = Math.abs(new Random().nextInt(500));
        order.setId(number);
        order.setOrderNo("order_" + number);
        orderDao.saveOrder(order);
        //减库存
        this.updateProductStockCountById(1, 1L);
       }
      
        // 事务传播类型NOT_SUPPORTED,不支持事务
       @Transactional(propagation = Propagation.NOT_SUPPORTED)
       public void updateProductStockCountById(Integer stockCount, Long id){
        productDao.updateProductStockCountById(stockCount, id);
       }
      }
      
  7. 不正确的捕获异常

    • 如果方法抛出的异常被捕获处理,没有被Spring获取到时,最终会正常提交,不会回滚。
  8. Spring事务管理针对的异常和抛出的异常类型不一致

    • 默认情况下Spring事务注解@Transaction只会针对RuntimeException异常进行处理
    • 如果@Transaction配置的处理异常是RuntimeException,但抛出的异常是Exception,事务失效。

相关推荐

  1. spring事务失效场景

    2024-05-10 09:36:10       12 阅读
  2. Spring事务失效场景

    2024-05-10 09:36:10       14 阅读
  3. Spring事务失效场景

    2024-05-10 09:36:10       9 阅读
  4. Spring事务失效场景

    2024-05-10 09:36:10       30 阅读
  5. Spring事务失效场景

    2024-05-10 09:36:10       14 阅读
  6. spring 事务失效的几种场景

    2024-05-10 09:36:10       7 阅读
  7. Spring Boot 事务管理(事务失效常见场景

    2024-05-10 09:36:10       18 阅读
  8. Spring事务的几种失效场景

    2024-05-10 09:36:10       12 阅读

最近更新

  1. TCP协议是安全的吗?

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

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

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

    2024-05-10 09:36:10       18 阅读

热门阅读

  1. Android OpenMAX(七)OMX Service

    2024-05-10 09:36:10       15 阅读
  2. 【48】Camunda8-Self-Managed部署

    2024-05-10 09:36:10       12 阅读
  3. HTTP调用API框架Forest

    2024-05-10 09:36:10       10 阅读
  4. MongoDB 从部署到掌握

    2024-05-10 09:36:10       13 阅读
  5. MongoDB聚合运算符:$toObjectId

    2024-05-10 09:36:10       13 阅读
  6. React 学习-4

    2024-05-10 09:36:10       11 阅读
  7. iOS-SSL固定证书

    2024-05-10 09:36:10       9 阅读
  8. 快速了解Vuex

    2024-05-10 09:36:10       9 阅读
  9. Vue3:视图渲染

    2024-05-10 09:36:10       8 阅读
  10. VMware 的三种网络模式

    2024-05-10 09:36:10       10 阅读
  11. flutter 在onError函数中不推荐使用“runZoned

    2024-05-10 09:36:10       9 阅读