[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1b300lqgtfmoj":3,"$f250wz8h39yydc":8,"$f2sjsm7earac5z":29,"$fh8iy32231rt":33,"$fuc6xkyw56v43":44,"toc--1219190335-5-5":48},{"description":4,"domain":5,"id":6,"keywords":4,"title":7},"","api.kongjs.com",1,"默认",[9,20,24],{"children":10,"icon":4,"id":11,"linkType":12,"linkUrl":13,"parentId":14,"sort":15,"status":16,"target":17,"title":18,"visible":19},null,"447369447469600768","URL","\u002F","0",0,"1","_self","首页",true,{"children":10,"icon":4,"id":21,"linkType":12,"linkUrl":22,"parentId":14,"sort":15,"status":16,"target":17,"title":23,"visible":19},"447369693859794944","\u002Fnotes","笔记",{"children":10,"icon":4,"id":25,"linkType":26,"linkUrl":27,"parentId":14,"sort":15,"status":16,"target":17,"title":28,"visible":19},"447369977960976384","PAGE","\u002Fabout","关于我",{"category":10,"categoryId":10,"cover":10,"description":4,"fileId":10,"id":30,"publishAt":10,"tags":31,"title":32},"453169352129126400",[],"Spring面试核心知识",[34,37,40],{"children":10,"description":4,"id":35,"noteId":30,"parentId":14,"sort":15,"status":16,"title":36},"453169498883629056","Spring IOC、Bean注入、循环依赖、AOP、动态代理完整原理",{"children":10,"description":4,"id":38,"noteId":30,"parentId":14,"sort":6,"status":16,"title":39},"453169617112670208","Spring事务原理、传播机制、失效场景、分布式事务全套实现",{"children":10,"description":4,"id":41,"noteId":30,"parentId":14,"sort":42,"status":16,"title":43},"453169742979538944",2,"SpringBoot2\u002F3\u002F4自动装配原理、版本迭代详解",{"content":45,"contentType":46,"description":4,"title":39,"wordCount":47},"# Spring事务原理、传播机制、失效场景、分布式事务全套实现\n\n本文全覆盖Spring事务高频核心：**本地事务底层原理、四大隔离级别、七种传播机制、事务百分百失效场景、常见坑点、分布式事务问题、四种主流分布式事务实现方案**，逻辑闭环、无废话、可直接背诵面试。\n\n## 一、Spring本地事务核心原理\n\n### 1\\. 事务核心本质\n\nSpring事务是**AOP动态代理实现**，基于数据库事务，在目标方法执行前后：开启事务、提交事务、回滚事务。\n\n核心机制：**ThreadLocal 事务上下文绑定**，同一线程共享同一个数据库连接，保证事务统一提交\u002F回滚。\n\n### 2\\. 事务ACID特性\n\n- **原子性**：事务要么全部成功、要么全部回滚\n\n- **一致性**：事务前后数据状态合法、完整性不变\n\n- **隔离性**：多事务并发互不干扰（隔离级别控制）\n\n- **持久性**：事务提交后数据永久落地，宕机不丢失\n\n---\n\n## 二、事务四大隔离级别（数据库底层）\n\n解决并发事务三大问题：**脏读、不可重复读、幻读**\n\n### 1\\. 三大并发读问题\n\n- **脏读**：读取到其他事务**未提交**的脏数据\n\n- **不可重复读**：同一事务内，两次读取同一数据，结果不一致（被其他事务update修改提交）\n\n- **幻读**：同一事务内，两次查询条数不一致（被其他事务insert\u002Fdelete提交）\n\n### 2\\. 四大隔离级别（从低到高）\n\n|隔离级别|脏读|不可重复读|幻读|性能|\n|---|---|---|---|---|\n|READ\\_UNCOMMITTED（读未提交）|存在|存在|存在|最高|\n|READ\\_COMMITTED（读已提交，Oracle默认）|杜绝|存在|存在|较高|\n|REPEATABLE\\_READ（可重复读，MySQL默认）|杜绝|杜绝|存在|中等|\n|SERIALIZABLE（串行化）|杜绝|杜绝|杜绝|最低|\n\n**注意**：MySQL InnoDB 通过**间隙锁\\+临键锁**，在RR级别下**杜绝大部分幻读场景**。\n\n---\n\n## 三、Spring七种事务传播机制（面试天花板）\n\n传播机制作用：**解决事务嵌套调用时，父子事务如何传递、合并、隔离**\n\n### 1\\. 核心常用五种（必须背熟）\n\n- **REQUIRED（默认）**：有事务加入当前事务，无事务新建事务 **（最常用）**\n\n- **SUPPORTS**：有事务就加入，无事务非事务运行\n\n- **MANDATORY**：强制在事务内运行，无事务直接抛异常\n\n- **REQUIRES\\_NEW**：**独立新事务**，挂起旧事务，互不影响（核心！嵌套事务独立回滚）\n\n- **NOT\\_SUPPORTED**：强制非事务运行，挂起当前事务\n\n- **NEVER**：强制无事务，存在事务抛异常\n\n- **NESTED**：嵌套事务，依赖父事务，父回滚子必回滚，子回滚父不回滚（保存点机制）\n\n### 2\\. 高频面试对比：REQUIRED vs NESTED vs REQUIRES\\_NEW\n\n- **REQUIRED**：父子同一个事务，一荣俱荣一损俱损，任意异常整体回滚\n\n- **REQUIRES\\_NEW**：完全独立两个事务，互不影响，子失败不影响父，父失败不回滚子已提交数据\n\n- **NESTED**：子事务是父事务的保存点，父回滚全部回滚，子回滚只回滚子部分\n\n---\n\n## 四、Spring事务百分百失效场景（实战高频坑）\n\n所有事务失效本质：**AOP代理失效 \u002F 异常未被Spring捕获 \u002F 无事务上下文**\n\n### 1\\. 代理失效导致失效（最常见）\n\n- **同类内部调用**：本类无事务方法调用本类@Transactional方法，this调用绕过代理，事务完全失效\n\n- **方法非public**：private\u002Fprotected\u002Fdefault 方法，Spring无法代理，事务失效\n\n- **final\u002Fstatic方法**：无法被CGLIB\u002FJDK代理，事务失效\n\n### 2\\. 异常捕获不规范导致失效\n\n- **手动try\\-catch捕获异常不抛出**：Spring感知不到异常，不会回滚\n\n- **抛出检查异常（Exception）**：Spring默认只回滚RuntimeException和Error，检查异常不回滚\n        \n解决方案：`@Transactional(rollbackFor = Exception.class)`\n\n### 3\\. 数据库\u002F配置问题导致失效\n\n- **数据库引擎不支持事务**：MyISAM不支持事务，必须InnoDB\n\n- **事务传播机制配置错误**：如NOT\\_SUPPORTED、NEVER强制非事务\n\n- **多线程异步调用**：子线程无法继承主线程ThreadLocal事务上下文，事务独立失效\n\n### 4\\. 事务失效终极解决方案\n\n- 内部调用：使用AopContext\\.currentProxy\\(\\)获取代理对象调用\n\n- 统一配置rollbackFor = Exception\\.class\n\n- 保证事务方法public、非final、非static\n\n- 禁止跨线程事务传递\n\n---\n\n## 五、分布式事务核心问题\n\n### 1\\. 什么是分布式事务\n\n跨**多个数据库、多个服务、多个节点**的事务，无法通过本地ACID保证数据一致性。\n\n### 2\\. 分布式CAP\\&BASE理论（必考）\n\n- **CAP**：一致性、可用性、分区容错性，三者无法同时满足，分布式场景必须舍弃C或A\n\n- **BASE**：基本可用、软状态、最终一致性（互联网分布式主流方案）\n\n### 3\\. 分布式事务痛点\n\n本地事务只单库单连接，分布式事务跨服务跨库，出现部分成功部分失败，**数据不一致**\n\n---\n\n## 六、分布式事务四种主流实现方案（从弱到强）\n\n### 1\\. 本地消息表（最终一致性、低耦合）\n\n#### 原理\n\n业务表 \\+ 消息表 **本地事务绑定**，先落库业务数据\\+消息数据，定时任务轮询消息表投递、重试，消费成功更新状态。\n\n#### 优缺点\n\n- 优点：无中间件、简单可靠、无侵入、高可用\n\n- 缺点：需要建表、轮询有延迟、最终一致性\n\n**适用**：大多数普通业务、异步通知场景\n\n### 2\\. RocketMQ事务消息（半消息机制）\n\n#### 原理\n\n半消息预发送 → 本地事务执行 → 确认提交\u002F回滚 → MQ投递消息，异常MQ反向回查本地事务状态。\n\n#### 优缺点\n\n- 优点：无需建表、框架封装、重试可靠、最终一致\n\n- 缺点：依赖RocketMQ、仅支持最终一致性\n\n**适用**：高并发异步业务、解耦分布式事务\n\n### 3\\. TCC事务（补偿型、强一致性、高性能）\n\n#### 三段式接口：Try\\-Confirm\\-Cancel\n\n- **Try**：资源检查、资源锁定、预扣库存\u002F金额\n\n- **Confirm**：确认执行业务，正式提交\n\n- **Cancel**：失败回滚、释放资源、补偿撤销\n\n#### 优缺点\n\n- 优点：无锁、高性能、准实时一致、适合高并发\n\n- 缺点：代码侵入极强、开发成本极高、需要幂等防悬挂\n\n**适用**：支付、订单、金融核心业务\n\n### 4\\. Seata AT模式（无侵入、主流首选）\n\n#### 原理（两阶段提交）\n\n- **一阶段**：执行业务SQL，自动记录undo日志、快照数据，本地事务提交\n\n- **二阶段**：全部成功则删除undo日志；任意失败则根据undo日志**自动回滚**\n\n#### 优缺点\n\n- 优点：**零代码侵入**、使用简单、适配所有Spring项目、生态成熟\n\n- 缺点：全局锁、存在数据脏写、极端场景有一致性问题\n\n**适用**：90%互联网业务、微服务标准分布式事务方案\n\n---\n\n## 七、四种分布式事务方案终极对比（面试必背）\n\n|方案|一致性|性能|代码侵入|适用场景|\n|---|---|---|---|---|\n|本地消息表|最终一致|高|低|普通异步业务|\n|RocketMQ事务消息|最终一致|极高|极低|高并发异步解耦|\n|TCC|准实时强一致|高|极高|金融、支付核心|\n|Seata AT|弱一致\u002F最终一致|中高|零侵入|微服务通用首选|\n\n---\n\n## 八、全文终极面试总结\n\n- **事务原理**：Spring AOP代理\\+ThreadLocal绑定数据库连接，实现声明式事务\n\n- **隔离级别**：MySQL默认RR可重复读，解决脏读、不可重复读，规避大部分幻读\n\n- **传播机制**：默认REQUIRED共用事务，REQUIRES\\_NEW独立事务，NESTED嵌套保存点事务\n\n- **失效场景**：内部调用、非public、异常捕获、跨线程、引擎不支持事务\n\n- **分布式事务**：本地消息表、MQ事务消息、TCC补偿、Seata AT，根据一致性与性能选型","markdown",3816,{"frontmatter":49,"meta":50,"nodes":161},{},{"title":39,"description":51,"toc":52},"本文全覆盖Spring事务高频核心：本地事务底层原理、四大隔离级别、七种传播机制、事务百分百失效场景、常见坑点、分布式事务问题、四种主流分布式事务实现方案，逻辑闭环、无废话、可直接背诵面试。",{"title":4,"searchDepth":53,"depth":53,"links":54},5,[55,66,75,85,101,114,155,158],{"id":56,"depth":42,"text":57,"children":58},"spring-1","一、Spring本地事务核心原理",[59,63],{"id":60,"depth":61,"text":62},"spring-_1",3,"1. 事务核心本质",{"id":64,"depth":61,"text":65},"spring-_2-acid","2. 事务ACID特性",{"id":4,"depth":42,"text":67,"children":68},"二、事务四大隔离级别（数据库底层）",[69,72],{"id":70,"depth":61,"text":71},"-_1","1. 三大并发读问题",{"id":73,"depth":61,"text":74},"-_2","2. 四大隔离级别（从低到高）",{"id":76,"depth":42,"text":77,"children":78},"spring-2","三、Spring七种事务传播机制（面试天花板）",[79,82],{"id":80,"depth":61,"text":81},"spring-_1-1","1. 核心常用五种（必须背熟）",{"id":83,"depth":61,"text":84},"spring-_2-required-vs-nested-vs-requires_new","2. 高频面试对比：REQUIRED vs NESTED vs REQUIRES_NEW",{"id":86,"depth":42,"text":87,"children":88},"spring-3","四、Spring事务百分百失效场景（实战高频坑）",[89,92,95,98],{"id":90,"depth":61,"text":91},"spring-_1-2","1. 代理失效导致失效（最常见）",{"id":93,"depth":61,"text":94},"spring-_2","2. 异常捕获不规范导致失效",{"id":96,"depth":61,"text":97},"spring-_3","3. 数据库\u002F配置问题导致失效",{"id":99,"depth":61,"text":100},"spring-_4","4. 事务失效终极解决方案",{"id":102,"depth":42,"text":103,"children":104},"-1","五、分布式事务核心问题",[105,108,111],{"id":106,"depth":61,"text":107},"-_1-1","1. 什么是分布式事务",{"id":109,"depth":61,"text":110},"-_2-capbase","2. 分布式CAP&BASE理论（必考）",{"id":112,"depth":61,"text":113},"-_3","3. 分布式事务痛点",{"id":115,"depth":42,"text":116,"children":117},"-2","六、分布式事务四种主流实现方案（从弱到强）",[118,129,137,146],{"id":119,"depth":61,"text":120,"children":121},"-_1-2","1. 本地消息表（最终一致性、低耦合）",[122,126],{"id":123,"depth":124,"text":125},"-_1-",4,"原理",{"id":127,"depth":124,"text":128},"-_1--1","优缺点",{"id":130,"depth":61,"text":131,"children":132},"-_2-rocketmq","2. RocketMQ事务消息（半消息机制）",[133,135],{"id":134,"depth":124,"text":125},"-_2-rocketmq-",{"id":136,"depth":124,"text":128},"-_2-rocketmq--1",{"id":138,"depth":61,"text":139,"children":140},"-_3-tcc","3. TCC事务（补偿型、强一致性、高性能）",[141,144],{"id":142,"depth":124,"text":143},"-_3-tcc-try-confirm-cancel","三段式接口：Try-Confirm-Cancel",{"id":145,"depth":124,"text":128},"-_3-tcc-",{"id":147,"depth":61,"text":148,"children":149},"-_4-seata-at","4. Seata AT模式（无侵入、主流首选）",[150,153],{"id":151,"depth":124,"text":152},"-_4-seata-at-","原理（两阶段提交）",{"id":154,"depth":124,"text":128},"-_4-seata-at--1",{"id":156,"depth":42,"text":157},"-3","七、四种分布式事务方案终极对比（面试必背）",{"id":159,"depth":42,"text":160},"-4","八、全文终极面试总结",[162,166,175,178,181,188,195,197,225,228,230,236,238,262,264,348,362,364,366,372,374,425,427,445,447,449,455,457,477,479,493,500,502,522,524,538,540,542,544,551,553,567,569,575,577,579,581,584,591,593,601,607,609,611,614,616,624,629,631,633,653,655,663,668,670,672,689,691,703,708,710,712,798,800,802],[163,164,39],"h1",{"id":165},"spring",[167,168,169,170,174],"p",{},"本文全覆盖Spring事务高频核心：",[171,172,173],"strong",{},"本地事务底层原理、四大隔离级别、七种传播机制、事务百分百失效场景、常见坑点、分布式事务问题、四种主流分布式事务实现方案","，逻辑闭环、无废话、可直接背诵面试。",[176,177,57],"h2",{"id":56},[179,180,62],"h3",{"id":60},[167,182,183,184,187],{},"Spring事务是",[171,185,186],{},"AOP动态代理实现","，基于数据库事务，在目标方法执行前后：开启事务、提交事务、回滚事务。",[167,189,190,191,194],{},"核心机制：",[171,192,193],{},"ThreadLocal 事务上下文绑定","，同一线程共享同一个数据库连接，保证事务统一提交\u002F回滚。",[179,196,65],{"id":64},[198,199,200,207,213,219],"ul",{},[201,202,203,206],"li",{},[171,204,205],{},"原子性","：事务要么全部成功、要么全部回滚",[201,208,209,212],{},[171,210,211],{},"一致性","：事务前后数据状态合法、完整性不变",[201,214,215,218],{},[171,216,217],{},"隔离性","：多事务并发互不干扰（隔离级别控制）",[201,220,221,224],{},[171,222,223],{},"持久性","：事务提交后数据永久落地，宕机不丢失",[226,227],"hr",{},[176,229,67],{"id":4},[167,231,232,233],{},"解决并发事务三大问题：",[171,234,235],{},"脏读、不可重复读、幻读",[179,237,71],{"id":70},[198,239,240,250,256],{},[201,241,242,245,246,249],{},[171,243,244],{},"脏读","：读取到其他事务",[171,247,248],{},"未提交","的脏数据",[201,251,252,255],{},[171,253,254],{},"不可重复读","：同一事务内，两次读取同一数据，结果不一致（被其他事务update修改提交）",[201,257,258,261],{},[171,259,260],{},"幻读","：同一事务内，两次查询条数不一致（被其他事务insert\u002Fdelete提交）",[179,263,74],{"id":73},[265,266,267,286],"table",{},[268,269,270],"thead",{},[271,272,273,277,279,281,283],"tr",{},[274,275,276],"th",{},"隔离级别",[274,278,244],{},[274,280,254],{},[274,282,260],{},[274,284,285],{},"性能",[287,288,289,305,320,334],"tbody",{},[271,290,291,295,298,300,302],{},[292,293,294],"td",{},"READ_UNCOMMITTED（读未提交）",[292,296,297],{},"存在",[292,299,297],{},[292,301,297],{},[292,303,304],{},"最高",[271,306,307,310,313,315,317],{},[292,308,309],{},"READ_COMMITTED（读已提交，Oracle默认）",[292,311,312],{},"杜绝",[292,314,297],{},[292,316,297],{},[292,318,319],{},"较高",[271,321,322,325,327,329,331],{},[292,323,324],{},"REPEATABLE_READ（可重复读，MySQL默认）",[292,326,312],{},[292,328,312],{},[292,330,297],{},[292,332,333],{},"中等",[271,335,336,339,341,343,345],{},[292,337,338],{},"SERIALIZABLE（串行化）",[292,340,312],{},[292,342,312],{},[292,344,312],{},[292,346,347],{},"最低",[167,349,350,353,354,357,358,361],{},[171,351,352],{},"注意","：MySQL InnoDB 通过",[171,355,356],{},"间隙锁+临键锁","，在RR级别下",[171,359,360],{},"杜绝大部分幻读场景","。",[226,363],{},[176,365,77],{"id":76},[167,367,368,369],{},"传播机制作用：",[171,370,371],{},"解决事务嵌套调用时，父子事务如何传递、合并、隔离",[179,373,81],{"id":80},[198,375,376,385,391,397,407,413,419],{},[201,377,378,381,382],{},[171,379,380],{},"REQUIRED（默认）","：有事务加入当前事务，无事务新建事务 ",[171,383,384],{},"（最常用）",[201,386,387,390],{},[171,388,389],{},"SUPPORTS","：有事务就加入，无事务非事务运行",[201,392,393,396],{},[171,394,395],{},"MANDATORY","：强制在事务内运行，无事务直接抛异常",[201,398,399,402,403,406],{},[171,400,401],{},"REQUIRES_NEW","：",[171,404,405],{},"独立新事务","，挂起旧事务，互不影响（核心！嵌套事务独立回滚）",[201,408,409,412],{},[171,410,411],{},"NOT_SUPPORTED","：强制非事务运行，挂起当前事务",[201,414,415,418],{},[171,416,417],{},"NEVER","：强制无事务，存在事务抛异常",[201,420,421,424],{},[171,422,423],{},"NESTED","：嵌套事务，依赖父事务，父回滚子必回滚，子回滚父不回滚（保存点机制）",[179,426,84],{"id":83},[198,428,429,435,440],{},[201,430,431,434],{},[171,432,433],{},"REQUIRED","：父子同一个事务，一荣俱荣一损俱损，任意异常整体回滚",[201,436,437,439],{},[171,438,401],{},"：完全独立两个事务，互不影响，子失败不影响父，父失败不回滚子已提交数据",[201,441,442,444],{},[171,443,423],{},"：子事务是父事务的保存点，父回滚全部回滚，子回滚只回滚子部分",[226,446],{},[176,448,87],{"id":86},[167,450,451,452],{},"所有事务失效本质：",[171,453,454],{},"AOP代理失效 \u002F 异常未被Spring捕获 \u002F 无事务上下文",[179,456,91],{"id":90},[198,458,459,465,471],{},[201,460,461,464],{},[171,462,463],{},"同类内部调用","：本类无事务方法调用本类@Transactional方法，this调用绕过代理，事务完全失效",[201,466,467,470],{},[171,468,469],{},"方法非public","：private\u002Fprotected\u002Fdefault 方法，Spring无法代理，事务失效",[201,472,473,476],{},[171,474,475],{},"final\u002Fstatic方法","：无法被CGLIB\u002FJDK代理，事务失效",[179,478,94],{"id":93},[198,480,481,487],{},[201,482,483,486],{},[171,484,485],{},"手动try-catch捕获异常不抛出","：Spring感知不到异常，不会回滚",[201,488,489,492],{},[171,490,491],{},"抛出检查异常（Exception）","：Spring默认只回滚RuntimeException和Error，检查异常不回滚",[167,494,495,496],{},"解决方案：",[497,498,499],"code",{},"@Transactional(rollbackFor = Exception.class)",[179,501,97],{"id":96},[198,503,504,510,516],{},[201,505,506,509],{},[171,507,508],{},"数据库引擎不支持事务","：MyISAM不支持事务，必须InnoDB",[201,511,512,515],{},[171,513,514],{},"事务传播机制配置错误","：如NOT_SUPPORTED、NEVER强制非事务",[201,517,518,521],{},[171,519,520],{},"多线程异步调用","：子线程无法继承主线程ThreadLocal事务上下文，事务独立失效",[179,523,100],{"id":99},[198,525,526,529,532,535],{},[201,527,528],{},"内部调用：使用AopContext.currentProxy()获取代理对象调用",[201,530,531],{},"统一配置rollbackFor = Exception.class",[201,533,534],{},"保证事务方法public、非final、非static",[201,536,537],{},"禁止跨线程事务传递",[226,539],{},[176,541,103],{"id":102},[179,543,107],{"id":106},[167,545,546,547,550],{},"跨",[171,548,549],{},"多个数据库、多个服务、多个节点","的事务，无法通过本地ACID保证数据一致性。",[179,552,110],{"id":109},[198,554,555,561],{},[201,556,557,560],{},[171,558,559],{},"CAP","：一致性、可用性、分区容错性，三者无法同时满足，分布式场景必须舍弃C或A",[201,562,563,566],{},[171,564,565],{},"BASE","：基本可用、软状态、最终一致性（互联网分布式主流方案）",[179,568,113],{"id":112},[167,570,571,572],{},"本地事务只单库单连接，分布式事务跨服务跨库，出现部分成功部分失败，",[171,573,574],{},"数据不一致",[226,576],{},[176,578,116],{"id":115},[179,580,120],{"id":119},[582,583,125],"h4",{"id":123},[167,585,586,587,590],{},"业务表 + 消息表 ",[171,588,589],{},"本地事务绑定","，先落库业务数据+消息数据，定时任务轮询消息表投递、重试，消费成功更新状态。",[582,592,128],{"id":127},[198,594,595,598],{},[201,596,597],{},"优点：无中间件、简单可靠、无侵入、高可用",[201,599,600],{},"缺点：需要建表、轮询有延迟、最终一致性",[167,602,603,606],{},[171,604,605],{},"适用","：大多数普通业务、异步通知场景",[179,608,131],{"id":130},[582,610,125],{"id":134},[167,612,613],{},"半消息预发送 → 本地事务执行 → 确认提交\u002F回滚 → MQ投递消息，异常MQ反向回查本地事务状态。",[582,615,128],{"id":136},[198,617,618,621],{},[201,619,620],{},"优点：无需建表、框架封装、重试可靠、最终一致",[201,622,623],{},"缺点：依赖RocketMQ、仅支持最终一致性",[167,625,626,628],{},[171,627,605],{},"：高并发异步业务、解耦分布式事务",[179,630,139],{"id":138},[582,632,143],{"id":142},[198,634,635,641,647],{},[201,636,637,640],{},[171,638,639],{},"Try","：资源检查、资源锁定、预扣库存\u002F金额",[201,642,643,646],{},[171,644,645],{},"Confirm","：确认执行业务，正式提交",[201,648,649,652],{},[171,650,651],{},"Cancel","：失败回滚、释放资源、补偿撤销",[582,654,128],{"id":145},[198,656,657,660],{},[201,658,659],{},"优点：无锁、高性能、准实时一致、适合高并发",[201,661,662],{},"缺点：代码侵入极强、开发成本极高、需要幂等防悬挂",[167,664,665,667],{},[171,666,605],{},"：支付、订单、金融核心业务",[179,669,148],{"id":147},[582,671,152],{"id":151},[198,673,674,680],{},[201,675,676,679],{},[171,677,678],{},"一阶段","：执行业务SQL，自动记录undo日志、快照数据，本地事务提交",[201,681,682,685,686],{},[171,683,684],{},"二阶段","：全部成功则删除undo日志；任意失败则根据undo日志",[171,687,688],{},"自动回滚",[582,690,128],{"id":154},[198,692,693,700],{},[201,694,695,696,699],{},"优点：",[171,697,698],{},"零代码侵入","、使用简单、适配所有Spring项目、生态成熟",[201,701,702],{},"缺点：全局锁、存在数据脏写、极端场景有一致性问题",[167,704,705,707],{},[171,706,605],{},"：90%互联网业务、微服务标准分布式事务方案",[226,709],{},[176,711,157],{"id":156},[265,713,714,731],{},[268,715,716],{},[271,717,718,721,723,725,728],{},[274,719,720],{},"方案",[274,722,211],{},[274,724,285],{},[274,726,727],{},"代码侵入",[274,729,730],{},"适用场景",[287,732,733,750,766,781],{},[271,734,735,738,741,744,747],{},[292,736,737],{},"本地消息表",[292,739,740],{},"最终一致",[292,742,743],{},"高",[292,745,746],{},"低",[292,748,749],{},"普通异步业务",[271,751,752,755,757,760,763],{},[292,753,754],{},"RocketMQ事务消息",[292,756,740],{},[292,758,759],{},"极高",[292,761,762],{},"极低",[292,764,765],{},"高并发异步解耦",[271,767,768,771,774,776,778],{},[292,769,770],{},"TCC",[292,772,773],{},"准实时强一致",[292,775,743],{},[292,777,759],{},[292,779,780],{},"金融、支付核心",[271,782,783,786,789,792,795],{},[292,784,785],{},"Seata AT",[292,787,788],{},"弱一致\u002F最终一致",[292,790,791],{},"中高",[292,793,794],{},"零侵入",[292,796,797],{},"微服务通用首选",[226,799],{},[176,801,160],{"id":159},[198,803,804,810,815,821,827],{},[201,805,806,809],{},[171,807,808],{},"事务原理","：Spring AOP代理+ThreadLocal绑定数据库连接，实现声明式事务",[201,811,812,814],{},[171,813,276],{},"：MySQL默认RR可重复读，解决脏读、不可重复读，规避大部分幻读",[201,816,817,820],{},[171,818,819],{},"传播机制","：默认REQUIRED共用事务，REQUIRES_NEW独立事务，NESTED嵌套保存点事务",[201,822,823,826],{},[171,824,825],{},"失效场景","：内部调用、非public、异常捕获、跨线程、引擎不支持事务",[201,828,829,832],{},[171,830,831],{},"分布式事务","：本地消息表、MQ事务消息、TCC补偿、Seata AT，根据一致性与性能选型"]