开发者社区> 问答> 正文

在使用AbstractRoutingDataSource时,Druid的DataSourceStat

使用Spring的AbstractRoutingDataSource进行数据源动态切换,在targetDataSource中添加了Db1,Db2,Db3三个DruidDataSource类型的数据源,且都已配置对应的Filters,但是在Druid监控画面中DataSourceStat List中只显示Db1的监控信息。

DataSource的Annotation位置放到接口方法上,没有放到实现类上,现在已经可以显示了。

原提问者GitHub用户yosaku01

展开
收起
山海行 2023-07-05 20:33:17 71 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    使用AbstractRoutingDataSource进行数据源动态切换时,您在targetDataSource中添加了Db1、Db2、Db3三个DruidDataSource类型的数据源,并且都已配置对应的Filters。但是在Druid监控画面中,只显示了Db1的监控信息。这可能是因为您的@DataSource注解放在了接口方法上,而没有放在实现类上。

    AbstractRoutingDataSource是一种动态数据源切换的技术,它可以根据数据源的标识符,动态地选择不同的数据源。在使用AbstractRoutingDataSource时,您需要实现determineCurrentLookupKey方法,以返回当前使用的数据源的标识符。同时,您还需要在targetDataSource中,配置所有可用的数据源。

    在Spring中,如果您将@DataSource注解放在接口方法上,而不是放在实现类上,那么在运行时,Spring将无法确定要使用哪个数据源。因此,只有放在实现类上才能正确地选择数据源。

    为了解决这个问题,您可以将@DataSource注解放在实现类上,而不是放在接口方法上。这样,Spring就可以正确地选择数据源,并在Druid监控画面中正确地显示监控信息。

    2023-07-30 14:05:11
    赞同 展开评论 打赏
  • 您的问题可能是由于您在使用 Spring 的 AbstractRoutingDataSource 时,没有正确地配置数据源所导致的。具体来说,如果您在 AbstractRoutingDataSource 中添加了多个数据源,并且都已经配置了对应的 Filters,但是在 Druid 监控画面中只显示其中一个数据源的监控信息,那么可能是因为您没有将数据源的 Annotation 放到接口方法上,而是放到了实现类上。

    2023-07-11 10:09:44
    赞同 展开评论 打赏
  • 多个数据源,可以参考其中的第6点

    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

    原回答者GitHub用户wenshao

    2023-07-06 11:52:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载