96SEO 2026-02-19 21:27 10
href="https://www.cnblogs.com/liuyi13535496566/p/19621949"

aria-level="2">spring事务传播机制NEVER
NEVER(绝不)是约束性极强的传播行为,核心含义:会立即抛出IllegalTransactionStateException异常,直接禁止方法执行。
NEVER的核心,一定要分清:扣款接口:对方接口不允许被事务包裹(事务回滚可能导致接口重复调用,造成重复扣款);
日志查询:业务要求这类操作绝对脱离事务上下文,避免事务隔离级别影响查询结果。
为场景,演示NEVER的核心效果:
com.example.demo.service;import
org.springframework.stereotype.Service;
org.springframework.transaction.annotation.Propagation;
org.springframework.transaction.annotation.Transactional;/***
LoggerFactory.getLogger(ThirdPayService.class);/***
NEVER:必须非事务执行,有外层事务则抛异常*/@Transactional(propagation
模拟支付成功log.info("第三方支付接口调用完成:订单{},扣款{}元,结果{}",
com.example.demo.service;import
com.example.demo.mapper.OrderMapper;
org.springframework.stereotype.Service;
org.springframework.transaction.annotation.Propagation;
org.springframework.transaction.annotation.Transactional;import
LoggerFactory.getLogger(OrderService.class);@Resourceprivate
==========@Transactional(propagation
createOrderWithPayInTransaction(String
Order();order.setOrderNo(orderNo);order.setAmount(BigDecimal.valueOf(amount));order.setStatus("UNPAID");orderMapper.insertOrder(order);//
调用NEVER的第三方支付接口(有外层事务,预期抛异常)thirdPayService.callThirdPayApi(orderNo,
注意:无@Transactional注解,即无外层事务public
createOrderWithPayWithoutTransaction(String
调用NEVER的第三方支付接口(无外层事务,正常执行)thirdPayService.callThirdPayApi(orderNo,
com.example.demo.service.OrderService;
org.springframework.boot.test.context.SpringBootTest;
org.springframework.transaction.IllegalTransactionStateException;import
javax.annotation.Resource;@SpringBootTest
testNeverWithOuterTransaction()
{orderService.createOrderWithPayInTransaction(orderNo,
IllegalTransactionStateException)
testNeverWithoutOuterTransaction()
System.currentTimeMillis();orderService.createOrderWithPayWithoutTransaction(orderNo,
createOrderWithPayInTransaction方法开启了事务;callThirdPayApi(NEVER)时,Spring检测到已有外层事务,立即抛出IllegalTransactionStateException;
第三方支付接口调用完成:订单ORDER_1740000000000,扣款199.99元,结果SUCCESS
NEVER方法以非事务方式正常执行;“不想占用事务资源”,用NOT_SUPPORTED(挂起事务执行);
“绝对禁止在事务中执行”,才用NEVER(有事务则抛异常)。
“绝对禁止事务执行”:有外层事务则抛异常,无则以非事务方式执行,与NOT_SUPPORTED(挂起事务执行)有本质区别;
NEVER和NOT_SUPPORTED,仅在的场景下使用NEVER,避免滥用导致不必要的异常。
扣款接口:对方接口不允许被事务包裹(事务回滚可能导致接口重复调用,造成重复扣款);这句话怎么理解
扣款接口:对方接口不允许被事务包裹(事务回滚可能导致接口重复调用,造成重复扣款)”
这句话的理解,首先要先拆解核心问题,用通俗的语言解释,结合场景和流程,还要对比有事务和无事务的区别,最后总结关键点。
事务只能管自己的数据库操作,管不了第三方系统的状态。
比如你调用扣款接口,对方扣了钱,这个操作是不可逆的(除非走退款流程),和你的事务回滚无关。
的风险流程,用具体的例子,比如用户下单→调用第三方扣款→自己的数据库更新订单状态,这个流程如果包在事务里,出问题会怎样。
“重试机制”(比如因为订单状态是未支付,以为扣款失败,再次调用接口),就会导致重复扣款。
只对内(你的数据库),对外(第三方系统)无效:你的事务回滚只能撤销自己的操作,撤销不了第三方的扣款;
“扣款没成功”,触发重试逻辑,导致重复调用接口,重复扣款;
不是万能的:虽然第三方会做幂等(比如按订单号防重复),但事务包裹会增加幂等校验的复杂度,对方更希望你先确保自己的流程没问题,再调用接口。
你必须先以非事务方式调用接口,确认接口调用成功后,再处理自己的数据库事务(或者反过来,先处理自己的非事务逻辑,再调用接口)。
“对方扣了钱,自己没更新状态”,进而触发重试→重复扣款;
流程拆解,把这个风险点讲透,帮你理解背后的本质原因。
生效,管不了外部系统(比如第三方支付平台)的操作:
结果:第三方扣了钱,你的订单状态也更新了,数据一致。
thirdPayService.callPayApi(orderNo,
步骤3:更新订单状态(因异常未执行)orderMapper.updateOrderStatus(orderNo,
“重试机制”(比如定时任务扫描未支付订单,重新扣款):
最终用户被重复扣款,这是第三方支付接口绝对要避免的风险,因此对方会明确要求:接口不能被事务包裹。
NEVER传播行为的核心价值,就是强制接口调用脱离事务上下文,让你必须遵循调用NEVER的第三方扣款接口(无事务,调用成功即生效)String
thirdPayService.callPayApi(orderNo,
步骤2:单独事务处理自己的数据库操作updateOrderStatusInTransaction(orderNo);
updateOrderStatusInTransaction(String
{orderMapper.updateOrderStatus(orderNo,
事务只能管控自身数据库操作,管不了第三方接口的执行结果,事务包裹接口会导致
的价值:强制接口调用脱离事务,让你必须先完成接口调用(确认扣款结果),再处理自身事务,从根源避免上述风险。
class="post-meta-container">
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback