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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## @Transactional 注解可以作用于哪些地方 1. 作用于類:當把@Transactional 注解放在類上時,表示所有該類的public方法都配置相同的事務屬性信息。 2. 作用于方法:當類配置了@Transactional,方法也配置了@Transactional,方法的事務會覆蓋類的事務配置信息。 3. 作用于接口:不推薦這種使用方法,因為一旦標注在Interface上并且配置了Spring AOP 使用CGLib動態代理,將會導致@Transactional注解失效 ## @Transactional 失效場景 1. @Transactional 應用在非 public 修飾的方法上 必須在代理類里重寫帶注解方法以添加開啟事務、提交事務的代碼。從這個角度來說,private方法不能被繼承,final方法不能被重寫,static方法和繼承不相干,所以它們3個的事務不起作用。Spring選擇讓protected方法和package方法不支持事務 2. @Transactional 注解屬性 propagation 設置錯誤 TransactionDefinition.PROPAGATION_SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續運行。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,如果當前存在事務,則把當前事務掛起。 TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,如果當前存在事務,則拋出異常。比如 IO操作的錯誤都不會回滾 3. @Transactional 注解屬性 rollbackFor 設置錯誤 Spring默認拋出了未檢查unchecked異常(繼承自 RuntimeException的異常)或者 Error才回滾事務. 4. 同一個類中方法調用,導致@Transactional失效 A沒有事務, A調用同個類的B, 這時候B的事務也不會有效果. A沒有事務調用其他類的C方法, C的事務會有效果, A不會有效果 5. 異常被你的 catch“吃了”導致@Transactional失效 Spring 事務使用AOP實現, 不拋異常, 導致AOP異常通知無法回滾, 如果事務注解里的某段代碼報錯不想影響已經執行的代碼, 就可以使用try catch 將其包裹. 6. 數據庫引擎不支持事務 (5.5版本之前)低版本的 MySQL以前都是用的MySQL自己的存儲引擎 MyISAM, 這個不支持事務, 現在的MySQL默認都是使用的第三方存儲引擎InnoDB, 這個是支持事務的 7. 方法不在同一個大的事務下 之前遇到過同事在controller 方法A直接調用了倆個其他controller層對應service層的方法B和方法C, B 和 C 是有正確使用注解, 但是方法C報錯, 方法B的事務沒有回滾 , 原因就是B和C是各自不同的事務, 當方法B執行完之后, 其事務也就結束了, 當后續的方法C報錯時, 只會影響C的事務回滾. controller 層應該只調用自己對應的service層, 由自己的service層再去調用其他service層的方法。
                  <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>

                              哎呀哎呀视频在线观看