大家好,我的项目用的是mybatisplus-dynamic-datasource,主数据源是ck,还有一个是mysql,运行相安无事,但是生产环境需要用集群模式的ck,调研发现需要用ck-driver的BalancedClickhouseDataSource,需要加了个java config,如图
我数据库的数据源配置如下图
这样我发现多数据源配置失效了,查mysql的实际运行的是我的ck的,大家帮忙看看
Npc
2
是不是数据源bean名称的问题?
我之前用过mysql与clickhouse多数据源 不过我的clickhouse不是集群的
- 配置上的clickhouse与mysql这个key其实可以自定义的
-
我猜应该是生成的数据源的bean名称 因为@DS(“mysql”)或者@DS(“DB2”) 这样就可以切换到mysql数据源了
- 然后你自定义了clickhouse数据源的BalancedClickhouseDataSource 那么应该排除了自动装配的clickhouse数据源
- 生成的集群数据源bean名称是方法名 balancedClickhouseDataSource
- 但是你配置上primary的value是clickhouse 导致找不到对应的bean名称数据源, 所以就自动切换成了mysql? 你尝试把BalancedClickhouseDataSource的bean名称改成你配置上primary对应的名称看看
@Bean(“clickhouse”) 显式指定的话 就不会默认使用方法名当做bean名称了
1 个赞
Npc
3
上面回答错了.
刚花了点时间研究了下源码.自动配置类 → DynamicDataSourceAutoConfiguration类
YmlDynamicDataSourceProvider类
AbstractDataSourceProvider类 : YmlDynamicDataSourceProvider的父类
DynamicDataSourceCreator类
- 这样分析的话, 可以尝试向spring注入一个DynamicDataSourceCreator的继承类 重写下createDataSource的方法, 解析你自己的配置 创建个集群数据源返回给mybatis-plus就好
- (要注意优先级,应该在DynamicDataSourceProperties这个bean创建之后就可以注入了. 因为自动装配那如果有手动注入的DynamicDataSourceCreator类的话, 就不会自己注入. )
- 切换数据源流程大概就是mybatis-plus自己维护了个map.根据注解@DS(“key”)利用key在map里面获取对应的数据源 进行AOP注入切换
-
使用spring直接注入数据源是没被mybatis-plus维护的反而使mybatis-plus的动态数据源自动装配失效.只使用spring注入的数据源.
在DynamicDataSourceAutoConfiguration类可以看到
1 个赞
ROOT
4
就佩服你这种动不动就扒拉源码的选手,有理有据。硬!!!!!!
Npc
5
想看官方文档的…要收费29.9元… 只能连猜靠蒙的去看源码了