96SEO 2026-02-20 01:17 9
href="https://www.cnblogs.com/liuyi13535496566/p/19621560"

aria-level="2">spring传播机制事务NOT_SUPPORTED
会将外层事务的数据库事务资源(比如数据库连接的事务状态、锁、事务
“上下文信息”(比如事务的存在性、执行状态)并没有消失,NOT_SUPPORTED
会自动恢复外层事务的数据库资源,外层事务继续执行。
外层事务方法:如果外层捕获了异常且不重新抛出,事务管理器感知不到异常,不会回滚;如果异常抛到事务方法之外,事务管理器能感知到。
默认只对RuntimeException(运行时异常)和Error触发回滚;如果是Checked
IOException),默认不回滚(除非配置rollbackFor)。
RuntimeException("内层NOT_SUPPORTED方法抛异常");
Order();order.setOrderNo(UUID.randomUUID().toString().substring(0,
32));order.setAmount(amount);orderMapper.insertOrder(order);
this.calculateTotalOrderAmount();System.out.println("统计结果:"
验证数据库:新增的订单是否存在List<Order>
orderMapper.listAllOrders();System.out.println("数据库中订单数量:"
RuntimeException(符合默认回滚规则);@Transactional(propagationpublic
Order();order.setOrderNo(UUID.randomUUID().toString().substring(0,
32));order.setAmount(amount);orderMapper.insertOrder(order);
新增订单try
this.calculateTotalOrderAmount();}
catch
{System.out.println("外层捕获内层异常:"
e.getMessage());//
不重新抛出异常}System.out.println("外层方法继续执行");
数据库中订单数量:1@Transactional(propagationpublic
Order();order.setOrderNo(UUID.randomUUID().toString().substring(0,
32));order.setAmount(amount);orderMapper.insertOrder(order);this.calculateTotalOrderAmount();
抛IOException
数据库中订单数量:1
IOException(Checked@Transactional(propagationrollbackFor
“你在转账(外层事务)时,查余额(内层)发现系统报错”:
方法的异常是否导致外层回滚,核心看外层是否让异常逃出事务方法,且异常符合回滚规则;
的查询方法有异常时,外层该回滚还是捕获,首先要先明确核心原则,因为内层是查询(无写操作),所以核心是
“查询异常不应该影响外层写操作的原子性”,先定这个大方向。
然后要说明什么时候该捕获,什么时候特殊情况才考虑回滚,还要给具体的代码示例,因为用户需要实际的用法。
的查询方法抛出异常时,外层事务方法应该选择回滚还是捕获这个异常,核心是想明确这种场景下的最佳实践和决策依据。
“正常业务被撤销”;查询异常通常是临时的(如数据库连接、查询语法),不影响已完成的写操作的有效性;符合
降级处理),再给特殊情况回滚的方案(捕获后主动抛运行时异常)。
核心结论是:优先捕获异常(不让异常触发外层回滚),仅在查询结果是外层业务
的原子性,查询失败不代表写操作本身有问题(比如新增订单成功,只是统计订单金额时查询超时,订单本身是合法的,不该回滚);
“数据修改的原子性”,纯读操作的异常不该干扰写操作的提交。
“附加操作”(比如新增订单后统计总金额、查询订单列表展示),不影响核心业务(订单创建)的完成。
LoggerFactory.getLogger(OrderService.class);//
外层事务:新增订单(核心写操作)@Transactional(propagation
Order();order.setOrderNo(UUID.randomUUID().toString().substring(0,
32));order.setAmount(amount);orderMapper.insertOrder(order);log.info("核心操作完成:新增订单,订单号={}",
非核心查询:统计总金额(NOT_SUPPORTED)BigDecimal
this.calculateTotalOrderAmount();log.info("查询总金额成功:{}",
捕获异常:记录日志+降级处理(返回默认值)log.error("查询订单总金额失败,原因:{}",
降级:返回0或从缓存取历史值,不影响核心业务totalAmount
核心业务继续执行(不受查询异常影响)log.info("订单创建完成,总金额(降级后):{}",
内层:纯查询(NOT_SUPPORTED)@Transactional(propagation
Propagation.NOT_SUPPORTED)public
RuntimeException("查询订单总金额超时");}
处理方式:捕获异常后,主动抛出运行时异常,触发外层事务回滚。
LoggerFactory.getLogger(OrderService.class);//
外层事务:下单(必须先查库存)@Transactional(propagation
核心查询:检查库存(NOT_SUPPORTED,库存是否充足是下单的前提)Integer
{log.error("查询库存失败,无法下单,触发回滚:{}",
RuntimeException("库存查询失败,取消订单创建",
RuntimeException("库存不足,取消订单创建");}//
Order();order.setOrderNo(UUID.randomUUID().toString().substring(0,
32));order.setAmount(amount);orderMapper.insertOrder(order);log.info("订单创建成功:{}",
内层:查询库存(NOT_SUPPORTED,核心前提)@Transactional(propagation
Propagation.NOT_SUPPORTED)public
“无脑回滚”:只要查询异常就回滚外层写操作,会导致大量正常业务被撤销(比如订单创建成功,只是统计报表查询失败,回滚订单完全没必要);
“无脑吞异常”:即使捕获异常,也必须记录日志(方便排查问题),且不能忽略
“异常可追溯(日志)”+“业务逻辑合法(不违背核心规则)”。
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