<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          今日代碼 PK | 處理 Spring 事務和鎖沖突

          共 1839字,需瀏覽 4分鐘

           ·

          2024-04-12 01:19

          在我們日常的開發(fā)中,經常會接觸到事務和鎖,

          當同時用到這二者的時候,你知道里面的坑嗎?

          比如,某個service里的下面這段偽代碼有問題嗎?

          示例代碼:

          @Transactional(rollbackFor = Exception.class)
          public Boolean test() {
              String lock = "id";
              synchronized (lock.intern()) {
                  // 業(yè)務代碼
              }
              // 剩余邏輯

              return true;
          }

          很顯然是有問題,因為MySQL的默認隔離級別是可重復讀,

          因此在該事務提交前其他事務并不能獲取到該事務對數(shù)據(jù)操作后的結果,

          那么在第一個事務的synchronized塊執(zhí)行完之后且事務提交之前,

          其他事務在執(zhí)行synchronized塊中的代碼時使用的仍然是老數(shù)據(jù),

          從這方面來說其實就相當于沒有鎖住,也就是鎖失效。

          那么怎么改呢?示例代碼如下:

          public Boolean test() {
              String lock = "id";

              PostService postService = (PostService) AopContext.currentProxy();
              synchronized (lock.intern()) {

                  return postService.innerTest();
              }

              return true;
          }

          @Transactional(rollbackFor = Exception.class)
          public Boolean innerTest() {
              // 業(yè)務邏輯

              return true;
          }

          上面的代碼中我們沒有直接調用innerTest方法而是通過AopContext獲取的對象調用,

          你知道為什么嗎?歡迎投票并在評論區(qū)討論。

          完整代碼片段來源于代碼小抄,歡迎點擊進入小程序閱讀!

          在線訪問:https://www.codecopy.cn/post/gzshnr

          更多優(yōu)質代碼歡迎進入小程序查看!

          往期推薦

          今日代碼 PK | 使用 try-with-resources 關閉資源

          今日代碼 PK | 避免循環(huán)查庫

          今日代碼 PK | 使用 Optional 判空

          今日代碼 PK | Java 使用正則表達式

          今日代碼 PK | 優(yōu)雅統(tǒng)計耗時

          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一本无码免费 | 欧美日韩三级片在线观看 | 麻豆久久3 | 国语对白免费AV | 麻豆成人影院 |