多租户多数据源下:是否可以1个租户,对应多个数据源?

Blade 未结 1 971
8855709
8855709 剑圣 2021-09-09 18:01

一、该问题的重现步骤是什么?

问题一:

多租户的想要改造一下,同一个租户,对待不同的场景可以连接不同的数据库(例如,同租户下某些服务用XX库等)。

看了下代码,初始化动态数据源的查询是在TenantBaseConstant里面,最小的改动就是把查询源头改一下就可以了。

有没有什么办法,不改框架代码,修改TenantBaseConstant中的SQL。


如果这个SQL不能改的话,我就需要重写TenantDataSourceHolder,重写TenantDataSourceHolder是必要的重写TenantDataSourceAnnotationConfiguration和TenantDataSourceGlobalConfiguration,还有TenantDataSourceGlobalInterceptor


问题二:

租户动态数据源情况下,想做读写分离,这个怎么做?(修改、查询的业务代码是耦合的,不能分独立的工程)。

非动态数据源情况下,可以通过DynamicDataSourceContextHolder来切换主次数据源来实现读写分离。动态数据源下,切换就需要租户-服务-读/写这样三个值来确定使用的数据源,所以想要小成本改造一下。


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。


1条回答
  • 2021-09-09 22:17

    问题一:

    目前多租户只能分配一个数据源,推荐不要把问题复杂化,一个租户就一个数据库好了,然后和其他租户共用一个系统库,业务库独立起来。

    如果你一定要一个租户多个数据源,那现在的底层方案是不合适的,你需要重新改造。


    问题二:

    读写分离推荐不要从代码层面来处理,直接用代理把数据库的url返回,而代码层面直接配置读写分离代理后的地址,这样代码不需要变动,只需要中间件来处理就行了

    0 讨论(0)
提交回复