sharding如何动态添加数据源

也看这个方案了 how to config actual-data-nodes while my actual-data-nodes tables is dynamic。 · Issue #16725 · apache/shardingsphere (github.com)
做起来很奇怪不说,5.1.2里dataSource.getContextManager()也没了

那还是建议使用ss-proy

因为元数据模块在调整,反射取出来吧233,参考 Confusion about changes to ShardingSphereDataSource and ContextManager · Issue #18494 · apache/shardingsphere · GitHub

感谢回复,已经取出来contextmanager了,现在有一个问题是,怎么把这个新租户的数据源添加进去,或者说有没有可能重新加载一下所有的数据源(我是用java的方式来配置的数据源),contextmanager里暂时还没有发现有相关的接口

org.apache.shardingsphere.mode.manager.ContextManager#alterDataSourceConfiguration这个方法应该可以

好的,谢谢,我尝试下

你好!动态数据源的问题解决了吗?

这个根本不行,只是修改元信息了,实际上官方把动态变更数据源这块直接封死了,不允许这么干,可以看看代码ShardingSphereConnection中的ConnectionManager实现

在最5.1.X以上的shardingsphere-jdbc,除了需要contextManager.alterDataSourceConfiguration(SHARDING_SPHERE_LOGIC_DATABASE_NAME, dataSourcePropertiesMap);后,还需要将根连接池中的链接rebuild才行;一般默认的连接池是Hikari,只需要调用dataSource.getHikariPoolMXBean().softEvictConnections(),原理我就不细说了,可以重点关注ConnectionManager类和DriverDataSourceCache(5.4.X以上), 另外如果你的版本是5.4.X以上,获取ContextManager也不需要反射,只需要监听ContextManagerLifecycleListener既可拿到

京ICP备2021015875号