精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring 事務失效的場景及修復:從原理到實戰

開發 前端
在Java?企業級開發中,Spring?事務是保障數據一致性的核心機制。但實際項目中,開發者常遇到@Transactional?注解加了卻不生效的問題,這本質是對Spring事務實現原理理解不透徹或忽略關鍵細節導致的。

引言

在Java企業級開發中,Spring事務是保障數據一致性的核心機制。但實際項目中,開發者常遇到@Transactional注解加了卻不生效的問題,這本質是對Spring事務實現原理理解不透徹或忽略關鍵細節導致的。

Spring 事務基礎

在分析失效場景前,必須先明確 Spring 事務的核心原理 ——基于 AOP 動態代理實現,這是理解所有失效場景的關鍵。

事務的核心特性(ACID)

  • 原子性(Atomicity):事務是不可分割的最小單元,要么全成功,要么全回滾;
  • 一致性(Consistency):事務執行前后,數據從一個合法狀態轉換到另一個合法狀態;
  • 隔離性(Isolation):多個事務并發執行時,相互不干擾(由隔離級別控制,如READ_COMMITTED);
  • 持久性(Durability):事務提交后,數據修改永久保存在數據庫中。

Spring 事務的實現原理

Spring事務通過動態代理為目標Bean生成代理對象,當調用被@Transactional標注的方法時,代理對象會先攔截方法執行:

  • 開啟事務(創建數據庫連接,設置事務隔離級別、傳播行為等);
  • 調用目標方法(業務邏輯執行);
  • 若方法正常返回,提交事務;
  • 若方法拋出指定異常,回滾事務;
  • 若拋出未指定異常,不回滾(默認僅回滾RuntimeException和Error)。

關鍵結論:只有通過 Spring 容器管理的代理對象調用事務方法,事務才會生效;若繞開代理直接調用(如自調用),事務機制無法觸發。

Spring 事務失效的場景及說明

場景 1:非 public 修飾的方法加 @Transactional

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    // 錯誤:private方法,@Transactional無效
    @Transactional
    private void createOrder(Order order) {
        orderMapper.insert(order);
        // 模擬異常
        if (order.getAmount() < 0) {
            throw new RuntimeException("訂單金額非法");
        }
    }
}

// 外部調用private方法
public void submitOrder(Order order) {
    createOrder(order); // 直接調用,無代理攔截
}

Spring事務默認通過AOP動態代理實現,而Spring AOP(無論是JDK動態代理還是CGLIB代理)對方法權限有明確限制:僅攔截public修飾的方法。

場景 2:事務方法內部自調用

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private LogMapper logMapper;

    // 事務方法A
    @Transactional
    public void createOrder(Order order) {
        orderMapper.insert(order);
        // 錯誤:內部直接調用事務方法B,無代理攔截
        this.addOrderLog(order.getId()); 
    }

    // 事務方法B(期望單獨事務,但實際失效)
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void addOrderLog(Long orderId) {
        Log log = new Log();
        log.setOrderId(orderId);
        log.setContent("訂單創建成功");
        logMapper.insert(log);
        // 模擬異常:此時addOrderLog的事務不回滾,log仍會插入
        throw new RuntimeException("日志記錄異常");
    }
}

Spring事務的觸發依賴代理對象調用,而當一個事務方法(如methodA)內部直接調用另一個事務方法(如methodB)時,調用過程是目標對象→目標對象,而非代理對象→目標對象,繞開了AOP代理的攔截邏輯,導致methodB的事務不生效。

場景 3:異常被捕獲(try-catch)且未重新拋出

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Transactional
    public void createOrder(Order order) {
        try {
            orderMapper.insert(order);
            // 模擬異常
            if (order.getAmount() > 10000) {
                throw new RuntimeException("訂單金額超過上限");
            }
        } catch (Exception e) {
            // 錯誤:僅打印日志,未重新拋出異常
            log.error("創建訂單失敗", e);
        }
    }
}

Spring事務默認僅在方法拋出未被捕獲的RuntimeException或Error時才會觸發回滾。若開發者在事務方法中用try-catch捕獲了異常,且未在catch塊中重新拋出異常,Spring會認為方法執行成功,直接提交事務,導致異常發生時無法回滾。

場景 4:錯誤的事務傳播機制

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    // 錯誤:使用NOT_SUPPORTED,不支持事務
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void createOrder(Order order) {
        orderMapper.insert(order);
        throw new RuntimeException("模擬異常"); // 異常拋出,但事務未開啟,無法回滾
    }
}

Spring事務傳播機制定義了多個事務方法嵌套調用時,事務如何傳遞,若選擇了不支持事務或強制不使用事務的傳播行為,會導致事務失效。常見錯誤傳播行為:

  • Propagation.NOT_SUPPORTED:以非事務方式執行,若當前存在事務則暫停;
  • Propagation.NEVER:以非事務方式執行,若當前存在事務則拋出異常;
  • Propagation.SUPPORTS:若當前存在事務則加入,否則以非事務方式執行(非主動開啟事務)。

場景 5:數據源未配置事務管理器

// 錯誤:僅配置數據源,未配置事務管理器
@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/order_db");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

Spring事務的執行依賴事務管理器(TransactionManager),不同的數據源對應不同的事務管理器(如JDBC對應DataSourceTransactionManager,MyBatis對應SqlSessionTransactionManager)。若未在Spring容器中配置事務管理器,@Transactional注解會被忽略,事務無法生效。

Spring Boot中引入spring-boot-starter-jdbc或spring-boot-starter-data-jpa,會自動配置DataSourceTransactionManager,無需手動配置;但自定義數據源時,需手動綁定事務管理器。

場景 6:多線程調用事務方法

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private LogMapper logMapper;

    @Transactional
    public void createOrder(Order order) {
        // 主線程:插入訂單
        orderMapper.insert(order);

        // 錯誤:子線程調用事務方法,與主線程事務獨立
        new Thread(() -> {
            addOrderLog(order.getId()); // 子線程事務不生效(或與主線程獨立)
        }).start();

        // 模擬主線程異常:主線程回滾(訂單不插入),但子線程日志已插入
        throw new RuntimeException("主線程異常");
    }

    @Transactional
    public void addOrderLog(Long orderId) {
        Log log = new Log();
        log.setOrderId(orderId);
        logMapper.insert(log);
    }
}

Spring事務是線程綁定的,事務上下文(如數據庫連接)存儲在ThreadLocal中。當主線程調用子線程執行事務方法時,子線程無法繼承主線程的事務上下文,導致子線程的事務與主線程獨立,若子線程拋出異常,主線程事務不會回滾(反之亦然),可能出現數據一致性問題。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-09-05 07:13:13

2022-02-14 16:53:57

Spring項目數據庫

2024-01-29 08:28:01

Spring事務失效

2025-10-27 01:22:00

HTTP接口API

2025-11-13 08:08:15

2024-09-09 08:29:25

2025-09-29 01:50:00

2020-04-28 22:12:30

Nginx正向代理反向代理

2022-02-28 10:05:12

組件化架構設計從原組件化模塊化

2025-04-03 00:03:00

數據內存網絡

2021-09-04 07:56:44

Spring事務失效

2021-12-13 11:12:41

Spring事務失效

2025-11-11 07:54:21

2021-04-14 15:17:08

Transaction代碼語言

2025-05-28 08:45:00

2021-05-11 07:51:30

React ref 前端

2025-02-10 00:27:54

2023-07-05 08:45:18

Spring事務失效場景

2025-08-29 01:45:00

2023-05-05 07:39:04

Spring事務面試
點贊
收藏

51CTO技術棧公眾號

亚洲一区美女视频在线观看免费| 色综合久久88色综合天天免费| 国产综合福利在线| 青青操视频在线播放| 国产乱人伦精品一区| 在线观看欧美日本| 日本xxx免费| 男人av在线| 国产一区二区中文字幕| 78色国产精品| 精品国产乱码久久久久久鸭王1| 国产精品男女| 欧美男人的天堂一二区| 欧美爱爱视频免费看| 亚洲成人影院麻豆| 99re热这里只有精品视频| 国产日韩av在线| 羞羞影院体验区| 在线精品视频在线观看高清| 精品中文视频在线| 性一交一黄一片| 四虎成人在线| 狠狠躁夜夜躁人人爽天天天天97| 男女啪啪的视频| 国产高清一区在线观看| 北条麻妃国产九九精品视频| 国产在线久久久| 亚洲欧美综合自拍| 国自产拍偷拍福利精品免费一| 日韩中文字幕精品视频| 男人操女人动态图| 麻豆一区一区三区四区| 日韩欧美黄色影院| 国产成人美女视频| 97精品国产综合久久久动漫日韩| 精品女厕一区二区三区| 黄色片免费在线观看视频| 男人的天堂在线视频免费观看| 91啪九色porn原创视频在线观看| www.久久草| 一二三四区视频| 老司机午夜免费精品视频| 97久久精品视频| 久久久久久免费观看| 亚洲v在线看| www国产亚洲精品久久网站| 蜜乳av中文字幕| 九九视频免费观看视频精品| 亚洲国产天堂久久国产91 | 久久国产66| 国内精品免费午夜毛片| 精品无码m3u8在线观看| 欧美日韩免费观看一区=区三区| 精品国产美女在线| 三级影片在线观看| 99久久综合| 爱福利视频一区| sm捆绑调教视频| 欧美wwwww| 精品国产一区二区三区久久| 波多野结衣喷潮| 久久精品国内一区二区三区水蜜桃| 最近2019中文字幕mv免费看 | 蜜乳av综合| 日韩电影免费在线观看中文字幕| 久久精品女同亚洲女同13| 国产三级精品三级在线观看国产| 亚洲变态欧美另类捆绑| 精品无码在线视频| 国产免费播放一区二区| 尤物99国产成人精品视频| 亚洲毛片亚洲毛片亚洲毛片| 久久国产小视频| 欧美人交a欧美精品| 日本一二三区不卡| 久久综合伊人| 成人免费看片视频| 高清国产mv在线观看| 97se亚洲国产综合自在线 | 一区二区三区四区日韩| 欧美成人激情在线| 自拍偷拍欧美亚洲| 日本美女一区二区三区视频| 亚洲iv一区二区三区| 亚洲精品国产精品乱码不卡| 久久综合网色—综合色88| 视频一区二区三区在线观看| wwwav在线| 欧美日韩黄色大片| 天天干天天玩天天操| 97se亚洲| 国产亚洲aⅴaaaaaa毛片| 91精品一区二区三区蜜桃| 亚洲国产黄色| 国产欧美日韩视频| 少妇高潮久久久| 欧美国产激情二区三区 | 伊人春色在线观看| 欧美性xxxx极品hd满灌| 欧美丝袜在线观看| 日韩系列在线| 免费91在线视频| 中文字幕高清在线免费播放| 国产精品538一区二区在线| 欧美精品一区二区三区久久| 国产午夜精品久久久久免费视| 午夜av区久久| 97免费公开视频| 精品日韩毛片| 97免费中文视频在线观看| 中文字幕乱码中文字幕| 波多野结衣亚洲一区| 免费在线观看污污视频| 日韩欧美另类一区二区| 欧美xxxxx牲另类人与| 日本裸体美女视频| 蘑菇福利视频一区播放| www.久久久| 乱人伦中文视频在线| 丁香五六月婷婷久久激情| 手机在线免费毛片| 久久国产电影| 国产精品久久久久av| 少妇无码一区二区三区| 亚洲精品菠萝久久久久久久| 男人添女人下面免费视频| 西瓜成人精品人成网站| 性视频1819p久久| 国产男男gay体育生白袜| 欧美国产一区二区| 久章草在线视频| 久久av国产紧身裤| 久久久久久久久久久久av| 国产免费av观看| 中文av字幕一区| 中文字幕欧美人妻精品一区| 日韩精品丝袜美腿| 91sa在线看| 亚洲欧美强伦一区二区| 亚洲精品乱码久久久久久日本蜜臀| 蜜臀一区二区三区精品免费视频| 欧美中文一区二区| 国产精品高清网站| 国产福利小视频在线观看| 日韩欧美中文在线| 真实乱视频国产免费观看 | 亚洲一区精品视频在线观看| 国产尤物久久久| 日本一区二区三区在线播放| 日韩午夜影院| 日本高清不卡在线观看| 四虎国产精品成人免费入口| 香蕉国产精品偷在线观看不卡| 黑人中文字幕一区二区三区| 成人观看网址| 亚洲人成在线一二| 国产一区二区视频网站| 欧美高清一级片在线观看| 手机在线免费观看毛片| 日韩一区三区| 亚洲一区二区中文字幕| 女子免费在线观看视频www| 精品久久国产字幕高潮| 日韩伦人妻无码| 91亚洲大成网污www| 免费观看成人网| 精品国产一区二区三区小蝌蚪 | eeuss国产一区二区三区四区| 久久久久久久久网站| 污污的视频网站在线观看| 狠狠躁夜夜躁人人躁婷婷91 | 久久性感美女视频| 成人性生交大片免费看视频直播 | 88国产精品欧美一区二区三区| 日本一级在线观看| 欧美三区免费完整视频在线观看| 日韩精品一区二区亚洲av性色 | 国产在线观看a| 精品国产乱码久久久久久牛牛 | 日韩国产成人精品| www亚洲国产| 国产精品xxx在线观看| 国产97在线视频| 色开心亚洲综合| 亚洲精品在线观看网站| 中文字幕一区二区三区四区欧美| 国产精品国产三级国产aⅴ入口| 亚洲一二区在线观看| 99综合在线| 夜夜爽99久久国产综合精品女不卡 | 欧美日韩一区二区精品| 天堂网av2018| 成人av免费在线观看| 热久久精品免费视频| 亚洲蜜桃视频| 欧美成人综合一区| 精品中文字幕一区二区三区四区| 欧美一级淫片aaaaaaa视频| 色网站免费在线观看| 亚洲精品动漫100p| 国产孕妇孕交大片孕| 激情懂色av一区av二区av| 久久爱一区二区| 9l国产精品久久久久麻豆| 精品综合久久久久| 亚洲欧美日韩国产一区| 妞干网这里只有精品| 久久综合欧美| 国产精品久久国产三级国电话系列 | 国产v综合v亚洲欧美久久| 亚洲www色| 在线不卡国产精品| 亚洲 欧美 激情 另类| 欧美一级xxx| 中国精品一区二区| 狠狠久久亚洲欧美专区| 精品无码一区二区三区电影桃花| 欧美激情自拍偷拍| 国产精品三级在线观看无码| 成人午夜视频网站| 五月激情五月婷婷| 秋霞影院一区二区| 久久精品国产精品亚洲色婷婷| 欧美三级小说| 黄色一级片av| 91精品国产91久久久久久黑人| 欧洲精品久久| 三级小说欧洲区亚洲区| 国产精品免费一区二区三区观看| 91精品一久久香蕉国产线看观看| 日韩av手机在线| 涩涩视频网站在线观看| 国内揄拍国内精品| 国内在线视频| 欧美激情免费视频| 午夜小视频在线观看| 不卡av在线网站| 国产丝袜在线| 久久久国产精品亚洲一区| 91在线高清| 日韩中文视频免费在线观看| www.av在线| 中文字幕日韩av电影| 高清美女视频一区| 中文字幕av一区二区| jizz视频在线观看| 国产午夜精品全部视频在线播放| 高清日韩av电影| 正在播放亚洲1区| 69xxxx欧美| www.久久久久久.com| 蜜桃视频网站在线| 久久国产精品视频| 三级资源在线| 国内精品久久久久影院优| 日本在线啊啊| 国产精品久久99久久| 久久人体av| 亚洲a一级视频| 成人爽a毛片免费啪啪红桃视频| 国产精品免费一区二区| 天海翼精品一区二区三区| 欧美三日本三级少妇三99| 成人精品影视| 成人免费看片视频在线观看| 午夜日韩视频| 亚洲 自拍 另类小说综合图区| 一级成人国产| 天堂在线资源视频| 美国一区二区三区在线播放 | 日韩在线视频免费观看| 精品176二区| 韩国日本不卡在线| 日本欧美一区| 亚洲在线免费视频| 乱中年女人伦av一区二区| 日韩av一级大片| 午夜精品毛片| 国产中文字幕免费观看| 免费高清视频精品| 国产欧美视频一区| 久久久久国产精品麻豆| 日本黄色免费片| 天天综合网 天天综合色| 亚洲av无码不卡| 欧美一区二区三级| 三级在线观看| 超薄丝袜一区二区| 久久爱91午夜羞羞| 成人网中文字幕| 美女毛片一区二区三区四区| www.午夜色| 久久国产99| 三级黄色片免费观看| 91日韩在线专区| jizz亚洲少妇| 在线中文字幕不卡| 日本高清视频www| 日韩有码片在线观看| 在线免费看h| 91欧美精品成人综合在线观看| 女人抽搐喷水高潮国产精品| 中文字幕日韩一区二区三区不卡| 99精品免费网| 亚洲av无码久久精品色欲| 久久久777精品电影网影网| 久久久精品99| 在线播放中文字幕一区| 日本天堂影院在线视频| 精品自在线视频| 国产精品伊人| 日本a级片久久久| 在线欧美三区| 亚洲av无码成人精品区| 国产精品不卡视频| 午夜久久久久久久久久影院| 精品国产一区二区亚洲人成毛片 | 先锋影音国产精品| 日韩中文字幕亚洲精品欧美| 青青草97国产精品免费观看无弹窗版| 亚洲一级av无码毛片精品| 亚洲精品乱码久久久久久| 一级黄色a毛片| 国产亚洲精品久久| 成人免费无遮挡| 黄色小网站91| 亚洲小说区图片区| 国内精品国产三级国产aⅴ久| 中文av字幕一区| 中文字幕 国产精品| 日韩麻豆第一页| 91九色国产在线播放| 97在线资源站| 中国成人一区| 青娱乐国产精品视频| 最近日韩中文字幕| 97人妻人人澡人人爽人人精品| 中文一区二区视频| 97成人超碰| 亚洲欧洲久久| 麻豆高清免费国产一区| 精品一区二区三孕妇视频| 欧美系列在线观看| 91电影在线播放| 91精品国产自产在线老师啪| 97久久夜色精品国产| 午夜久久福利视频| 亚洲男女一区二区三区| 99精品在线视频观看| 欧美成人亚洲成人日韩成人| 日韩区欧美区| 免费无码毛片一区二三区| 99久久伊人久久99| 六月丁香激情综合| 国产一区二区黄| 国产精品99| 四虎免费在线观看视频| 国产精品1024| 久草精品视频在线观看| 亚洲黄一区二区| 伊人久久综合一区二区| 日本在线观看一区二区| 久久精品国产久精国产| 天天看天天摸天天操| 精品久久久久香蕉网| 91av亚洲| 亚洲永久激情精品| 国产精品99久久久久久宅男| 精品少妇久久久久久888优播| 精品亚洲aⅴ在线观看| 欧美aaa视频| 国产大尺度在线观看| 成人激情午夜影院| 久久久久久亚洲av无码专区| yellow中文字幕久久| 精品精品国产毛片在线看| 日韩精品一区二区三区久久| 亚洲国产成人在线| 蜜臀av中文字幕| 国产成人精品电影久久久| 香蕉久久网站| 黄色录像a级片| 在线观看一区二区视频| 香蕉成人app免费看片| 精品在线不卡| 久久国产生活片100| 国产一级片视频| 一区二区欧美日韩视频| 亚洲国产中文在线二区三区免| 欧美一级在线看| 综合久久综合久久| 亚洲区小说区图片区| 国产免费观看久久黄| 99成人在线| 亚洲国产成人精品综合99| 亚洲精品有码在线| 综合激情网...| 制服丝袜综合网| 欧美日韩精品在线| 最爽无遮挡行房视频在线|