单数据库改造成多数据源方案

Blade 未结 1 224
amoslam
amoslam 2025-10-16 15:07

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

  1. 系统已经开发完成,现多租户模式是通过一个数据库对应多个租户,通过表字段tenant_id字段来区分的

2. 开发阶段架构是没有考虑多数据库来区分租户设计的,业务代码没做区分,业务表和系统表也有很多关联查询

3.


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

现在想改造成一个租户一个数据的,用系统的多数据源配置,想问好改吗,有哪些要改动的地方,需要怎么改


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

springcloud


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


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

1条回答
  •  admin
    admin (楼主)
    2025-10-16 15:19

    数据库隔离方案看这个:https://center.javablade.com/blade/BladeX-Doc/src/branch/master/%E7%AC%AC5%E7%AB%A0%20%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/5.2%20SaaS%E5%A4%9A%E7%A7%9F%E6%88%B7/5.2.4.3%E6%95%B0%E6%8D%AE%E5%BA%93%E9%9A%94%E7%A6%BB%E9%85%8D%E7%BD%AE%28JDBC%29.md


    bladex自带的系统模块是共用一个统一的数据库的,只建议把租户的业务库迁移到新的数据库,然后把这个新数据库按照文档创建到租户数据源再绑定给租户就行了。


    其中tenant_id依旧保留,表结构无需做任何修改,你直接拷贝过去就行。


    至于和系统表的关联,需要看具体情况,你是通过sql语句写的逻辑,则需要重构,如果你是通过缓存或者API调用获取的系统信息,也就无需做修改。


    总结下来你只需要修改和系统表关联的部分。通过SysCache来根据各种id获取系统表的数据,然后再做匹配

    作者追问:2025-10-16 15:19

    像系统很多业务表查询的时候都关联了用户,系统统计用户业务数据的时候关联了,是不是这些代码需要分出来重构,还有业务字典也放公共库嘛

    回答: 2025-10-16 15:19

    是的,你可以看bladex原生的写法,字典、部门、用户全部都是不会参与sql查询的,都是通过包装类进行缓存的追加,这样一是性能好,二是方便库表迁移。


    https://center.javablade.com/blade/BladeX-Boot/src/branch/master/src/main/java/org/springblade/modules/system/wrapper/UserWrapper.java#L55


    作者追问:2025-10-16 15:19

    maste数据源怎么配置的,我看租户配置数据源只有一个,那租户访问系统模块应该去maste数据源image.png

    回答: 2025-10-16 15:19

    master数据库就是你的工程连接的主数据库

    作者追问:2025-10-16 15:19

    想问下,大致改造步骤是不是,先把系统表和业务表分离出来,在naocs开启全局多数据源功能,然后找到业务表与系统表关联的部分重构修改成不关联即可

    0 讨论(0)
提交回复