<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## @Transactional 失效場景 1. 業務代碼被try catch 包裹:由于異常被捕獲后沒有拋出,導致無法觸發aop的異常通知里的回滾。**如果某段代碼不想拋出異常,可以這樣處理** ``` @Transactional(rollbackFor = Exception.class) public String add() { try { userService.add(); roleService.add(); } catch (Exception e) { log.error("") } } ``` 2. 業務中間使用統一消息處理返回錯誤信息:這樣表示代碼正常執行完成,只是返回給前端的消息是錯誤信息,不會觸發aop的異常通知里的回滾 ``` @Transactional(rollbackFor = Exception.class) public String add() { map.insert(user) if(true) { // 這樣返回,上面的insert不回滾 return R.error(''); // 使用自定義異常拋出錯誤信息 // throw new BusinessException(""); } } ``` 3. 方法不在同一個大的事務下:之前遇到同事把業務代碼寫在controller層,導致調用的方法都正確添加了事務,但是事務之間相互獨立 ``` // service1和service2 的add 都各自添加了事務注解 當執行到 service2.add() 方法時,service1的add方法自己的事務流程已經結束,數據也已經保存到數據庫了,后邊方法報錯不會影響它 @GetMapping("/add") public R<String> add() { service1.add(); service2.add(); return R.ok(); } 應該放到一個大的事務下 @GetMapping("/add") public R<String> add() { service.add(); return R.ok(); } @Transactional(rollbackFor = Exception.class) public void add() { service1.add(); service2.add(); } ``` 4. 注解屬性 rollbackFor 設置錯誤 @Transactional 非受檢異常會回滾,像IOException 就不會回滾 ``` @Override @Transactional // 應該使用這個 //@Transactional(rollbackFor = Exception.class) public void save() throws IOException { add(); throw new IOException(); } ``` 5. 同一個類中方法調用 具體查看[spring事務本類調用](http://www.hmoore.net/wsj-/java/3094215) 文章 6. @Transactional 注解屬性 propagation 設置錯誤 1. TransactionDefinition.PROPAGATION_SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。 2. TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。 3. TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。比如 IO操作的錯誤都不會回滾 7. 數據庫引擎不支持事務:現在基本不會有這個問題,都是用 Innodb 存儲引擎了 (5.5版本之前)低版本的 MySQL以前都是用的MySQL自己的存儲引擎 MyISAM, 這個不支持事務, 現在的MySQL默認都是使用的第三方存儲引擎InnoDB, 這個是支持事務的 8. @Transactional 應用在非 public 修飾的方法上,規定只能是public的
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看