You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多数据源场景下,调试时如何查看请求使用的DataSource?

调试多数据源切换的方法

一、核心断点:定位数据源选择逻辑

直接在你的RoutingDataSource类的determineCurrentLookupKey()方法上设置断点——这是动态路由数据源的核心触发点,每次需要获取数据库连接时都会调用它。调试时观察返回值即可明确当前使用的数据源:

  • 返回TransactionType.READ_WRITE,对应读写数据源
  • 返回TransactionType.READ_ONLY,对应只读数据源

二、验证实际使用的数据源实例

如果要确认最终拿到的具体HikariDataSource实例,可以在以下位置加断点:

  • HikariDataSource的getConnection()方法:每次获取连接时触发,调试时查看实例的jdbcUrl、username等属性,直接区分读写/只读库
  • 你的DataSourceConfig类中readWriteDataSource()和readOnlyDataSource()方法:初始化阶段可以记录两个实例的引用,后续运行时对比确认

三、结合事务上下文追踪切换逻辑

如果是通过@Transactional注解的readOnly属性触发数据源切换,还可以在Spring的TransactionInterceptor.invoke()方法上设断点——这里会解析事务属性,判断是否为只读事务,进而设置对应的TransactionType,能完整追踪从事务注解到数据源选择的全流程

调试小技巧

  • 在determineCurrentLookupKey()方法内,查看存储TransactionType的ThreadLocal变量,确认当前线程的事务类型设置是否符合预期
  • 给两个HikariDataSource实例配置不同的poolName(对应配置文件里的spring.read-write.datasource.configuration.pool-name和spring.read-only.datasource.configuration.pool-name),调试时一眼就能区分实例归属

内容的提问来源于stack exchange,提问作者Valery Proskuryakov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:45:11