<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、概述 在Spring Boot中,當使用了spring-boot-starter-data-jpa(spring-boot-starter-jdbc也可以)依賴的時候,框架會自動默認分別注入DataSourceTransactionManager或JpaTransactionManager,不需要任何額外配置就可以用@Transactional注解進行事務的使用; ## 二、簡單使用 默認的,如果不做任何配置,springboot的事務控制在dao方法上,以單一的持久層方法作為事務控制的基礎單元; 如果需要將一個或多個dao方法與某些業務組合來控制事務(出現異常就會回滾),那么很簡單,使用@Transactional標注該方法(抽取到單一方法,比如service中的單一方法)即可; >[danger] > 1、實際開發中,通常在service層接口中使用@Transactional來對各個業務邏輯(組合了持久層dao方法)進行事務管理的配置; > 2、如果異常被try-catch了,事務就不回滾了,必須拋向被@Transactional注解的層,也就是說,@Transactional注解的代碼里面,如果出現異常,就會產生事務回滾,但必須注意,**不能把該代碼里面的異常自行捕獲且不再拋出**; >舉例: ``` 如果orderFlowPackage.order的方法有異常必須整體回滾,那么 正確的做法 @Transactional public ResponseObject orderFlowPackage(long cardId, long packageId) throws Exception { orderFlowPackage.order(0, cardId, packageId, CardOrderType.user_order_from_wechat, model.getCurLoginData().getCurStaffId()); return responseObj; } ``` 錯誤的捕獲異常示例: ``` @Transactional public void planExecuting(CardOrderPackagePlan cardOrderPackagePlan) { // 去執行訂購套餐 boolean isSuccess = false; String failReason = ""; long staffId = cardInfoDao.findById(cardOrderPackagePlan.getCardId()).get().getCardUserStaff(); try { orderFlowPackage.order(cardOrderPackagePlan.getPlanId(), cardOrderPackagePlan.getCardId(), cardOrderPackagePlan.getPlanPackageId(), CardOrderType.user_order_from_plan, staffId); } catch (Exception ex) { isSuccess = false; failReason = ex.getLocalizedMessage(); } } ``` ## 三、典型用法 ![](https://img.kancloud.cn/8b/df/8bdfc3d89510f82018ce9a90a3148b0b_815x625.png)
                  <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>

                              哎呀哎呀视频在线观看