日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?

發布時間:2025/3/21 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言
相信大家都遇到一種事務失效場景,那就是 Spring 自調用,就是在 Service 方法內,調用另一個加 @Transactional 注解的方法,發現事務失效,這時候你是怎么解決的呢?
公眾號:『 劉志航 』,記錄工作學習中的技術、開發及源碼筆記;時不時分享一些生活中的見聞感悟。歡迎大佬來指導!

事情回顧

那是一個我忘了天氣咋樣的下午,突然蹦出一個小紅點,嗯~ 挺著急的小紅點。

原來是事務失效了!

莫慌!莫慌!

最后小伙伴選擇了抽走,是我的工具類不香了么?

當然故事的結果是完美的,問題解決了。

事務

在開發中涉及到同時操作多個表的時候,要保證兩個操作要么一起成功,要么一起失敗,這時候就需要用到事務。

現在一般使用的都是基于 @Transactional 注解的聲明式事務。

而事務使用過程中有以下幾個注意事項:

  • 事務只能應用到 public 方法上才會有效;
  • 事務需要從外部調用,Spring 自調用會失效;
  • 建議事務注解 @Transactional 一般添加在實現類上。
  • 當然這幾句話不是說我的,人家官方文檔可是明確說明的!

    這里可是說明了應僅將 @Transactional 注解應用于具有公開可見性的方法。如果對受 protected, private o或 package-visible 修飾的方法使用,則不會引發任何錯誤,但是被注解的方法不會顯示已配置的事務設置。

    說白了,就是你用了,不會報錯,但是不生效!

    至于建議加在實現類上,這個只是建議,不過如果加在接口類或接口方法上時,只有配置基于接口的代理才會生效。所以這塊還是老老實實的加在實現類或實現類方法上吧。

    因為代理模式只攔截通過代理傳入的外部方法調用,所以自調用事務是不生效的。

    官方的解釋還是比較簡單明了的,雖然我看不懂,但是不影響我截圖。

    那我還是再截一個吧……

    實際使用

    但是在開發中,小伙伴們往往會遇到這種情況!

    本來自己寫的代碼就一坨坨的又臭又長,里面有各種驗簽、驗參、查詢、驗證等等,就想著來個事務,讓事務包裹的范圍最小,僅僅在同時更新的時候加上事務吧!

    這么寫,咦~ IDEA 報錯了,好像不能 private 修飾,那我改成 public。

    很顯然事務是不生效的。

    把更新的代碼放到又臭又長的代碼里面,讓它變得更臭更長,然后用 @Transactional 注解一加。完美解決!

    請放過那坨代碼吧!來看看下面的辦法。

    解決方案 1

    那我改成外部調用不就行了么?

    再聲明一個 Service,把更新表的邏輯放過去。

    我一般就喜歡使用這個辦法。

    解決方案 2

    使用編程式事務,前面說了,使用聲明式事務時,又這又那,我換一種總可以吧!

    你看,我還把方法改成 private 修飾了,事務也生效。完美解決!

    其實這個方法也很不錯哦!

    解決方案 3

    又想用注解,又想自調用怎么辦?

    不過... 麻煩一點還是可以的。

    咱們可以參考編程式事務的方式,不就是不讓自調用么,我調外部方法,然后外部方法再給我調回來不就可以了。

    @Component public class TransactionalComponent {public interface Cell {void run() throws Exception;}@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public void required(Cell cell) throws Exception {cell.run();} }

    這樣的話不就可以通過 TransactionalComponent 調用了么,并且還可以使用 lambda 表達式。

    當然基于這個版本也可以做一個迭代,就是使用靜態方法調用,不用每次都用 @Autowired 注入一次。

    public class TransactionalUtils {private static volatile TransactionalComponent transactionalComponent;private static synchronized TransactionalComponent getTransactionalComponent() {if (transactionalComponent == null) {// 從容器中獲取 transactionalComponenttransactionalComponent = ApplicationContextUtils.getBean(TransactionalComponent.class);}return transactionalComponent;}public static void required(TransactionalComponent.Cell cell) throws Exception {getTransactionalComponent().required(cell);}}

    這樣通過工具類 TransactionalUtils 便可以直接調用靜態方法的方式執行事務操作。

    總結

    結束語

    本文主要介紹為什么會遇到事務失效,以及事務失效的避免方式,同時提供了三種方式來解決自調用事務失效的問題。不足之處,歡迎指正。

    相關資料

  • Spring 文檔:https://docs.spring.io/spring-framework/docs/5.3.0/reference/html/data-access.html#transaction-declarative-annotations
  • 總結

    以上是生活随笔為你收集整理的wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人免费播放视频 | 日本视频二区 | 国产男女猛烈无遮挡免费视频动漫 | 国产精品午夜福利 | 久艹在线观看 | 精品视频在线免费 | 黄色污污视频网站 | 国产精品午夜电影 | 国产91精品高潮白浆喷水 | 天天干天天爽天天操 | 亚洲精品午夜 | 中文字幕一区二区在线老色批影视 | 人人爽人人爽人人爽人人爽 | 国产欧美精品在线 | 91丨porny丨九色 | 久久不卡日韩美女 | 一级黄色片免费观看 | 女优中文字幕 | 国产一区二区三区在线视频 | 啪啪网站大全 | 亚洲av无码国产精品久久 | 二级黄色录像 | 人妻天天爽夜夜爽一区二区三区 | 91福利在线播放 | 理论片久久 | 日本一区二区久久 | av在线最新 | 男女激情大尺度做爰视频 | 爱的色放在线 | 久久这里只有精品6 | 在线看黄色的网站 | 久久精品无码一区二区三区免费 | 成人三区| 8050午夜二级| 久久精品国产亚洲AV成人婷婷 | 51妺嘿嘿午夜福利 | 久久精品免费观看 | 精品视频一区二区在线观看 | 成年人黄视频 | 熟女国产精品一区二区三 | 黄色片网站在线播放 | 国产精品日韩一区 | 欧美va视频 | 黄色免费入口 | 国产免费一区二区三区 | 色欲色香天天天综合网www | 在线播放第一页 | 成人免费视频免费观看 | 性欧美bb | 国产伦理久久精品久久久久 | 熟妇五十路六十路息与子 | 黑人大群体交免费视频 | 美女日日日 | 夜色视频网 | 2019国产精品视频 | 精品人妻少妇AV无码专区 | 91丝袜一区在线观看 | 成人区人妻精品一区二区网站 | 丝袜脚交国产在线观看 | 日本一级二级视频 | 午夜在线你懂的 | 国产原创视频在线观看 | 啦啦啦免费高清视频在线观看 | 成人一级视频在线观看 | 免费网站在线观看视频 | 日韩精品在线免费观看视频 | 成人免费影视网站 | 伊人88| 日本一区二区不卡在线观看 | 久久视频这里只有精品 | 亚洲自拍偷拍精品 | 男女交性视频播放 | 久久传媒| 国产精品三级久久久久久电影 | 国产欧美日韩视频在线观看 | 蜜桃臀av在线 | 国产三级精品三级在线 | 伊人888| 国产av一区精品 | 蜜桃视频在线入口www | 视频一区亚洲 | 国产77777| 久久亚洲无码视频 | 亚洲免费视频一区二区三区 | 456亚洲影院 | 日本一区二区精品 | 日韩在线一区二区三区四区 | 好爽…又高潮了毛片免费看 | 国av在线| 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲最大福利网站 | 国产亚洲精品熟女国产成人 | 国产精品美女自拍视频 | 成人午夜网 | 亚洲性久久 | 国产成人精品av | 日韩特黄毛片 | 精品福利一区二区 | 日韩午夜视频在线 |