SpringBoot 事務與鎖不能並存的問題


這兩天寫了一個邏輯,需求大概是這樣的, 客戶有硬件下單與小程序下單,此時需要保證下單原子性和庫存一致,

因為是個單體項目,所以簡單處理直接在Service添加synchronized,這樣的話每個設備下單都要等到其他設備下完單

才可以下單,效率很低,后面,在內部維護了一個靜態map,存儲設備序列號,鎖對象為設備序列號,這樣控制每個設備串行下單,

不同設備並行下單.后面想着如果分布式部署,又會出問題,干脆一步到位,直接分布式鎖.lock4j.

介紹完畢.

下面說一下遇到的問題.

Jmeter並發測試,庫存對賬失敗.查閱資料,想起SB,是通過動態代理實現事務的.

下面說明兩種失效的分析

1.添加synchronized在方法上或者代碼塊上

  加在方法上,動態代理后直接忽略synchronized,

  加在代碼塊上,釋放鎖與動態代理的事務提交先后不一致

2.使用分布式鎖

  加在代碼塊上,釋放鎖與動態代理的事務提交先后不一致

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM