当前位置: 首页 > 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.jsqmd.com/news/57964/

相关文章:

  • 2025年知名的粉碎机厂家最新推荐排行榜
  • 2025年12月软件开发公司权威推荐榜:小程序开发、APP开发,创新技术驱动与高效交付实力之选
  • 2025年宣传册设计公司排名前十推荐:专业解决方案全解析
  • 2025年评价高的充电桩高压直流继电器/轨道交通高压直流继电器厂家推荐及选购参考榜
  • 护发素推荐几款好用的?2025年五大柔顺护发素榜单,精准针对头发干枯毛躁
  • 2025 年 12 月桥架厂家权威推荐榜:铝合金桥架/不锈钢桥架/热镀锌桥架,精选耐用型材与创新结构解决方案
  • 2025年靠谱的法兰加热管品牌厂家排行榜
  • 2025 国产 CMDB 厂商选型指南:自主可控时代的配置管理新方向
  • 2025年重庆别墅改造方案权威榜单:重庆旧房加层改造/重庆酒店改造/重庆洋房改造实力厂家精选
  • 2025年口碑好的柜内照明奢适美学五金厂家最新用户好评榜
  • 2025年知名的橡塑保温板/发泡橡塑保温材料厂家最新TOP排行榜
  • 2025年比较好的大型机床铸件用户口碑最好的厂家榜
  • nginx详解part1
  • 2025年热门的橱柜一字铰链/钛金一字铰链厂家推荐及选择参考
  • 2025年高精度稳压器(精度0.5%以内)十大品牌
  • 2025年靠谱的平板车/履带平板车厂家推荐及采购参考
  • YOLO11n.pt的 n 是什么意思
  • 2025年质量好的施肥旋耕机一体机/水田打浆旋耕机厂家最新推荐权威榜
  • L2 Linear Classification and Linear Regression
  • [译] 救命!我的 Java 对象消失了(垃圾回收器表示不背锅)
  • 2025年热门的日本公共交通/日本公共交通南海快线儿童出行规则榜
  • 2025年热门的大阪机场接送夜间接送夜间服务满意度榜
  • API与单元测试自动化
  • PBOOTCMS打开网站提示错误信息:执行SQL发生错误!错误: no such table:ay_config的解决方法
  • 发现你的专属色彩:一份为你定制的风格指南
  • 详细介绍:(ACP广源盛)GSV1175---MIPI/LVDS 输入到 Type-C/DisplayPort 1.2 输出且集成嵌入式 MCU 的信号转换器
  • 2025最新古董回收交易公司权威榜单:古玩家具/瓷器/书画/钱币/银元/铜器/玉器/老物件回收优质品牌排名
  • 2025年口碑好的气动真空吸盘厂家最新推荐排行榜
  • 2025年稳压器行业十大标杆品牌
  • 2025年质量好的不锈钢/不锈钢拖把池厂家最新TOP实力排行