• SpringBoot 事务与锁不能并存的问题


    这两天写了一个逻辑,需求大概是这样的, 客户有硬件下单与小程序下单,此时需要保证下单原子性和库存一致,

    因为是个单体项目,所以简单处理直接在Service添加synchronized,这样的话每个设备下单都要等到其他设备下完单

    才可以下单,效率很低,后面,在内部维护了一个静态map,存储设备序列号,锁对象为设备序列号,这样控制每个设备串行下单,

    不同设备并行下单.后面想着如果分布式部署,又会出问题,干脆一步到位,直接分布式锁.lock4j.

    介绍完毕.

    下面说一下遇到的问题.

    Jmeter并发测试,库存对账失败.查阅资料,想起SB,是通过动态代理实现事务的.

    下面说明两种失效的分析

    1.添加synchronized在方法上或者代码块上

      加在方法上,动态代理后直接忽略synchronized,

      加在代码块上,释放锁与动态代理的事务提交先后不一致

    2.使用分布式锁

      加在代码块上,释放锁与动态代理的事务提交先后不一致

       
  • 相关阅读:
    按钮设计
    图标设计
    滤镜与通道
    路径、形状工具与选区
    类的无参方法
    类和对象
    阅读器关闭时尝试调用Read无效时的解决方法
    进入ASP .net mvc的世界
    linux命令-vim
    linux命令-分区表fstab
  • 原文地址:https://www.cnblogs.com/xyzxy/p/15528804.html
Copyright © 2020-2023  润新知