精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲毛片播放| 亚洲成人偷拍| 最新高清无码专区| 亚洲mm色国产网站| 国产在线观看99| 欧美美女在线直播| 91国偷自产一区二区三区成为亚洲经典| 日韩欧美第二区在线观看| 国产乱淫片视频| 亚洲免费大片| 最近中文字幕日韩精品| 国产精品99久久久精品无码| 免费成人动漫| 亚洲精品乱码久久久久久| 久久综合婷婷综合| 国产a级免费视频| 亚洲一区图片| 欧美精品一本久久男人的天堂| 一本色道综合久久欧美日韩精品| 国产欧美自拍| 懂色av影视一区二区三区| 亚洲美女网站18| 污污视频在线观看网站| 极品少妇一区二区| 国产成+人+综合+亚洲欧美丁香花| 人人澡人人澡人人看| 校花撩起jk露出白色内裤国产精品| 欧美日韩激情在线| 红桃av在线播放| 免费污视频在线| 中文字幕欧美激情| 精品乱码一区| 丰满人妻一区二区三区四区53| 日韩不卡手机在线v区| 性色av一区二区咪爱| 黄色录像免费观看| 精品视频99| 日韩精品免费在线视频| 亚洲一二三四五| 国产精品.xx视频.xxtv| 色8久久精品久久久久久蜜| 成人在线国产视频| 国产色在线观看| 国产欧美精品一区二区色综合| 国产一区二区三区高清视频| 国产欧美一级片| 久久99精品久久久久久| 国产成人精品一区二区| 成年人av网站| 久久精品九九| 国产成人aa精品一区在线播放 | 中文字幕av在线一区二区三区| 精品蜜桃一区二区三区| 色wwwwww| 91在线免费视频观看| 精品无码久久久久久久动漫| 理论片中文字幕| av一区二区三区在线| 国产精选一区二区| www.国产黄色| 成人av网址在线| 国产欧美日韩综合一区在线观看| 亚洲精品成av人片天堂无码| 丁香五精品蜜臀久久久久99网站 | 久久久久观看| 亚洲精品成人av| 日韩网站在线播放| 久操精品在线| 中文字幕不卡av| 美国黄色片视频| 久久久久免费av| 色与欲影视天天看综合网| 久久国产在线观看| 亚洲日本免费| 国产精品扒开腿做| 亚洲天堂国产精品| 国产毛片精品视频| 国产欧美日韩一区| 久久精品a一级国产免视看成人 | 精品奇米国产一区二区三区| 怡红院一区二区| 欧美三级电影在线| 亚洲欧美视频在线| 女性裸体视频网站| 欧美色综合网| 日本久久久久久久久| 日韩国产成人在线| 国产一区二区成人久久免费影院| 99视频免费观看蜜桃视频| 人妻中文字幕一区| 久久久国际精品| 三级网在线观看| 国产第一页在线| 91国偷自产一区二区开放时间 | 日韩中文av在线| 亚洲av无码一区二区三区在线| 激情久久一区| 国产精品久久久久久影视 | 亚洲福利视频免费观看| 国产人妻大战黑人20p| 亚洲成av人片乱码色午夜| 高清欧美性猛交xxxx黑人猛交| 亚洲图片在线视频| 国产剧情一区在线| 欧美激情一区二区三区在线视频| 欧美激情视频在线播放| 亚洲一区在线观看视频| 丝袜制服一区二区三区| 一区二区三区高清在线观看| 在线播放国产精品| 日韩av在线电影| 激情亚洲综合在线| 久久天堂国产精品| www国产在线观看| 日本道色综合久久| 91丝袜在线观看| 五月天久久网站| 日本在线精品视频| 黄色一级大片在线免费看国产| 国产精品视频免费| 国产免费黄视频| 中文字幕日韩在线| 少妇av一区二区三区| 五月婷婷亚洲综合| 国产69精品久久久久777| 亚洲成人在线视频网站| 色戒汤唯在线观看| 精品国产一区a| 老妇女50岁三级| 蜜桃在线一区二区三区| 久久精品人人做人人爽电影| 中文在线字幕免费观看| 欧美精品一二三四| 中文字幕av久久爽一区| 亚洲伊人网站| 国产一区免费在线| av小说在线播放| 欧美成人官网二区| 希岛爱理中文字幕| 蜜桃视频一区二区三区| 欧美一级二级三级| 日韩精品一区二区三区| 日韩精品中文字幕在线播放| 麻豆视频在线观看| 国产九九视频一区二区三区| 亚洲一二三区精品| 成人精品国产| 一区二区三区久久精品| 久久国产精品免费看| 99免费精品在线| 亚洲国产精品无码av| 1204国产成人精品视频| 九九热在线精品视频| aa视频在线免费观看| 亚洲男同性恋视频| 免费看三级黄色片| 午夜激情一区| 国产69精品久久久久9999apgf| 污污片在线免费视频| 精品日韩在线观看| 免费在线观看黄网站| 99精品视频在线观看| 日韩欧美一区三区| 综合伊思人在钱三区| 国产精品成人在线| 91sp网站在线观看入口| 69堂精品视频| 久久免费视频99| 成人91在线观看| 18禁男女爽爽爽午夜网站免费| 日韩啪啪网站| 国产精品一区二区性色av| 巨大荫蒂视频欧美另类大| 91精品国产免费| 日本a在线观看| 91看片淫黄大片一级在线观看| www.亚洲天堂网| 国产剧情一区| 成人精品一区二区三区| h片在线免费观看| 亚洲国产成人久久综合一区| 久久精品视频7| 中文字幕综合网| 给我免费观看片在线电影的| 丝袜国产日韩另类美女| 99精品视频网站| 欧美aaaaa级| 国产精品中文字幕在线观看| 污网站在线免费看| 国产视频精品在线| 91国内精品视频| 亚洲国产精品欧美一二99| 给我看免费高清在线观看| 美女网站在线免费欧美精品| av一区二区三区免费观看| 亚洲欧洲免费| 91免费电影网站| 小h片在线观看| 久久精品视频网站| 奇米影视888狠狠狠777不卡| 制服丝袜日韩国产| 国产精品suv一区二区三区| 国产精品久久久久三级| 精品影片一区二区入口| 美女高潮久久久| 99精品在线免费视频| 亚洲色图插插| 日韩色妇久久av| 激情小说亚洲色图| 国产在线精品一区免费香蕉| 免费在线小视频| 久久天天躁狠狠躁老女人| 国产小视频在线| 亚洲电影免费观看高清完整版在线观看| 中文字幕 日韩有码| 五月综合激情日本mⅴ| 国产精品视频一区二区在线观看| 粉嫩久久99精品久久久久久夜| 日韩肉感妇bbwbbwbbw| 国产一区二区你懂的| 9色porny| 国产高清久久| 日韩一本精品| 四虎884aa成人精品最新| 2020国产精品久久精品不卡| 精品视频在线一区二区在线| 97免费视频在线| 亚洲精品一线| 久久伊人精品视频| √新版天堂资源在线资源| 日韩精品中文字幕在线播放| 亚洲毛片欧洲毛片国产一品色| 欧美日韩国产美女| 国产一级片一区二区| 日韩欧美亚洲国产一区| 国产精品50页| 亚洲五月六月丁香激情| 青青草国产在线观看| 成人欧美一区二区三区| 日本视频在线免费| 国产欧美一区二区三区在线看蜜臀 | 在线视频亚洲欧美| 人人妻人人澡人人爽久久av | 中文字幕无码不卡免费视频| 日韩视频三区| 内射国产内射夫妻免费频道| 亚洲激情婷婷| av免费看网址| 夜夜嗨网站十八久久| 国产精品999视频| 99re国产精品| av之家在线观看| 六月婷婷一区| 三级在线免费看| 美国av一区二区| 日本中文字幕精品—区二区| 麻豆精品一区二区三区| 国产精品自在自线| 国产酒店精品激情| 国产十八熟妇av成人一区| 99久久99久久精品国产片果冻| 黄色av网址在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 国产在线观看无码免费视频| 国产午夜亚洲精品理论片色戒| 变态另类ts人妖一区二区| 国产精品―色哟哟| 国产va在线播放| 亚洲国产精品久久一线不卡| 久草视频在线观| 欧美性猛片aaaaaaa做受| 中文字幕福利视频| 欧美一区二区视频免费观看| 风流少妇一区二区三区91| 国产午夜精品久久久| 成人p站proumb入口| 日韩亚洲在线观看| 亚洲资源一区| 性亚洲最疯狂xxxx高清| 超碰aⅴ人人做人人爽欧美| 国产精品免费视频久久久| 国产激情一区| 激情欧美一区二区三区中文字幕| 亚洲人成精品久久久 | 免费在线观看你懂的| 国产精品国产成人国产三级| 中文字幕五月天| 精品成人在线视频| 亚洲视屏在线观看| 精品国产免费久久| 超碰免费在线| 欧美韩国理论所午夜片917电影| 欧美日韩免费看片| 91亚洲va在线va天堂va国| 国产精品天天看天天狠| 婷婷久久青草热一区二区| 欧美a级在线| 人妻少妇被粗大爽9797pw| 国产乱码一区二区三区| v8888av| 亚洲私人影院在线观看| 一级成人黄色片| 日韩欧美一级特黄在线播放| 你懂的视频在线| free欧美| 精品中文字幕在线观看| 少妇av在线| 国产精品美乳在线观看| 欧美色图婷婷| 亚洲精品成人久久久998| 国语精品一区| 亚洲一级片av| 国产亚洲精久久久久久| 久久久久香蕉视频| 欧美夫妻性生活| 黄色av网站在线| 97久久超碰福利国产精品…| 97久久中文字幕| 涩涩涩999| 国产精品最新自拍| 国产高潮失禁喷水爽到抽搐| 亚洲国产成人私人影院tom | 亚洲精品色图| 黄色三级视频在线播放| 中文字幕 久热精品 视频在线 | 欧美日韩精品欧美日韩精品一综合| 五月婷婷丁香网| 欧美寡妇偷汉性猛交| 国产精品久久久久久久久久辛辛 | 懂色av一区| 91亚洲国产成人久久精品网站| 黑人操亚洲人| 色综合av综合无码综合网站| 成人动漫精品一区二区| 亚洲色婷婷一区二区三区| 欧美偷拍一区二区| 黑人与亚洲人色ⅹvideos| 91tv亚洲精品香蕉国产一区7ujn| 4438全国亚洲精品观看视频| 国产一区一区三区| 久久国产精品无码网站| 国产探花视频在线播放| 欧美性生交片4| 成人性爱视频在线观看| 国产精品678| 欧美理论电影大全| 日韩欧美在线免费观看视频| 久久你懂得1024| 欧美日韩综合一区二区三区| 日韩毛片在线观看| 在线观看网站免费入口在线观看国内 | 欧美色综合久久| 青青久草在线| 日韩av电影在线网| 精品理论电影| 老熟妇仑乱视频一区二区 | 久久国产精品99久久久久久丝袜| 极品中文字幕一区| 大尺度做爰床戏呻吟舒畅| 黄色成人在线免费| 国产又爽又黄网站亚洲视频123| 77777亚洲午夜久久多人| 妖精视频一区二区三区| 欧美性猛交xxx乱久交| 国产精品久久综合| 国产精品天天操| 欧美精品18videosex性欧美| julia中文字幕一区二区99在线| 日本wwwcom| 久久综合色播五月| 国产一级片一区二区| 久久精品久久久久久| 91精品短视频| 黄色一级一级片| 亚洲天堂2016| 无码国产精品高潮久久99| 国产mv久久久| 一区二区三区四区在线观看国产日韩| 一区二区在线免费观看视频| 欧美日韩国产激情| 国产51人人成人人人人爽色哟哟| 国产主播欧美精品| 悠悠资源网久久精品| av小说在线观看| 6080yy午夜一二三区久久| 欧美xxxx做受欧美88bbw| 欧美韩国日本精品一区二区三区| 久久精品久久精品| 国产在线视频你懂的| 亚洲天堂精品在线| 国产情侣一区在线| 激情综合网婷婷| 亚洲女同一区二区| 久蕉依人在线视频| 99视频日韩| 毛片av一区二区三区| 日韩特黄一级片| 久久香蕉频线观| 免费av一区| 亚洲成a人无码|