当前位置: 首页 > news >正文

遇到的问题之“加入Spring的事务 @Transactional(rollbackFor = Exception.class)导致@DS数据库切换失效”

遇到的问题之“加入Spring的事务  @Transactional(rollbackFor = Exception.class)导致@DS数据库切换失效”

1. 核心问题:事务与数据源的绑定时机

@Service
public class DataService {@DS("starrocks")  // 希望切换到 StarRocks@Transactional     // Spring 事务注解public void processData() {// 方法体
    }
}

 

执行流程问题:

  1. 事务切面先执行:Spring 的 @Transactional 切面先执行

  2. 获取数据库连接:事务管理器从默认数据源获取连接

  3. 开启事务:在默认连接上开启事务

  4. DS切面后执行:@DS 注解的切面后执行,尝试切换数据源

  5. 数据源切换失败:此时连接已绑定到事务,无法再切换

2. 代码层面的详细分析

// 伪代码:AOP 执行顺序
public Object invoke(MethodInvocation invocation) {// 1. 事务切面先执行
    TransactionAspectSupport.beginTransaction();//    ↓ 这里获取了默认数据源的连接// 2. DS切面后执行(如果切面顺序没调整)DynamicDataSourceContextHolder.push("starrocks");// 3. 执行业务方法Object result = invocation.proceed();// 4. DS切面清理
    DynamicDataSourceContextHolder.poll();// 5. 事务切面提交
    TransactionAspectSupport.commitTransaction();
}

 

3. 具体表现场景

场景1:嵌套服务调用

@Service
public class UserService {@DS("mysql")  // 主库
    @Transactionalpublic void updateUser(User user) {userMapper.update(user);// 调用统计服务statsService.updateStats(user);  // 这里可能无法切换到 StarRocks
    }
}@Service  
public class StatsService {@DS("starrocks")  // 希望用 StarRocks@Transactional(propagation = Propagation.REQUIRES_NEW)  // 新事务public void updateStats(User user) {// 由于外层已有事务,这里可能仍然使用 MySQL 连接
        statsMapper.insert(user);}
}

 

http://www.gsyq.cn/news/68323.html

相关文章:

  • 护发素推荐几款好用的?2025年五大柔顺护发素榜单,精准针对头发干枯毛躁
  • 2025 年 12 月桥架厂家权威推荐榜:铝合金桥架/不锈钢桥架/热镀锌桥架,精选耐用型材与创新结构解决方案
  • 2025年热门的橱柜一字铰链/钛金一字铰链厂家推荐及选择参考
  • 2025年靠谱的平板车/履带平板车厂家推荐及采购参考
  • 2025年质量好的施肥旋耕机一体机/水田打浆旋耕机厂家最新推荐权威榜
  • [译] 救命!我的 Java 对象消失了(垃圾回收器表示不背锅)
  • 2025年热门的日本公共交通/日本公共交通南海快线儿童出行规则榜
  • 详细介绍:(ACP广源盛)GSV1175---MIPI/LVDS 输入到 Type-C/DisplayPort 1.2 输出且集成嵌入式 MCU 的信号转换器
  • 2025年聚丙烯酰胺哪家强?五大权威供应商运输与实力全解析
  • 2025 年 12 月液压滑环厂家权威推荐榜:高速/半导体/多通道高压/耐高压/定制液压滑环,尖端密封与长效稳定之选
  • 2025年热门的生涯规划教育解决方案/生涯规划设备校园应用优选榜
  • 2025年边坡防护网厂家推荐榜单:5 家主动防护网+被动防护网厂家实力盘点
  • 2025年热门的翻身护理床厂家最新权威实力榜
  • 2025年知名的工厂食堂承包推荐榜单前十名
  • AI元人文构想:停止追问,开始构建
  • 深入解析:深入解析 Spring Boot 自动配置:原理、实践与进阶​
  • 2025如何选择澳洲出国留学中介公司
  • 2025年隐形防盗防护网钢霸实力厂家权威推荐榜单:钢霸实心钢隐形网怎么样‌/钢霸实心钢隐形防护网测评‌/钢霸隐形网‌源头厂家精选
  • 2025口碑最好的十大留学中介机构香港
  • 2025年12月旋转接头厂家权威推荐榜:高温/高压/高速/液压/导热油/蒸汽/水用旋转接头,匠心工艺与稳定性能的工业连接解决方案
  • 2025如何选择澳大利亚出国留学中介机构
  • 高效安全的文件自动同步系统,为企业数据传输提供可靠支撑
  • 2025青岛留学中介名单公布
  • PbootCMS幻灯片轮播图标签调用与参数详解
  • CS501芯片,Typec转DP 8k60方案,替代乐德瑞LDR6500方案
  • A. k-Amazing Numbers
  • 新能源汽修维修方面的学校TOP5权威推荐:深度测评指南,助力
  • 必看!2025年口碑好的新疆旅游服务排行榜
  • 减肥最快最有效方法!2025年代谢减肥产品深度评估,破解秋冬难瘦和反弹魔咒
  • [ffmpeg] 简单的文件转udp-ts流发送脚本