多租户数据源修改方案

2020-03-20 09:24:42 +08:00
 stonezing

每家商户都有独立数据源,没有使用微服务, 一台 nginx+多台应用服务, 如果修改了商户数据源密码或者连接信息,怎么通知到应用服务的 DataSource 刷新;

2765 次点击
所在节点    程序员
11 条回复
npe
2020-03-20 09:43:38 +08:00
租户的连接信息、账号密码单独存放在表 T,程序里面通过表 T 连接相应的数据源
stonezing
2020-03-20 10:27:26 +08:00
@npe 你说的是初始化加载, 现在问题是系统在运行, 租户的数据库密码被修改了, 怎么处理, 我有多台服务都要相应同步到, 除了重起服务方式。
z960112559
2020-03-20 14:18:20 +08:00
重新加载数据源
z960112559
2020-03-20 14:27:02 +08:00
按一楼说的,修改账号密码后肯定会报错,捕获异常,根据表内账号密码重新加载数据源
ElmerZhang
2020-03-20 14:40:30 +08:00
数据库用户名密码存储在配置中心(比如阿里开源的 Nacos ),写个 Listener 监听配置变化重建数据库连接。
ourslay
2020-03-20 15:45:01 +08:00
stonezing
2020-03-20 16:27:25 +08:00
@ourslay
@ElmerZhang @z960112559 主库里记录着所有租户的数据库连接信息, 现在是两台服务,接 nginx 负载,也就是修改了数据库租户的用户名密码后, 两台都要重新加载, 捕获异常也可以是, 但是如果改的是数据库的连接池信息呢,,有什么方案可以刷新这个 datasource 的对象
gz911122
2020-03-20 16:41:28 +08:00
配置中心了解一下
比如 Apollo
ourslay
2020-03-20 16:49:49 +08:00
@stonezing 你只需把 demo 里面读取数据连接部分替换成读取租户的数据库连接,接下来遍历您的服务实例发送 `/actuator/refresh` 请求。下次请求时候连接池将获得一个新 URL 的连接。
buliugu
2020-03-21 00:50:13 +08:00
这个似乎更适合 gaea 之类的中间件去做,应用层刷新 datasource 是件麻烦事儿
liubx
2020-10-29 17:29:28 +08:00
@stonezing 请问最终用的什么方案啊?我想参考下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX