NutzCN Logo
问答 NB中当 apollo 配置的数据库链接地址或 redis 链接地址变更后,如何创建新的链接?
发布于 107天前 作者 qinerg 305 次浏览 复制 上一个帖子 下一个帖子
标签:

一直有个疑问:
1、现有的 dao-starter / redis-starter 等如何跟 apollo 配置结合起来?
2、当 apollo 中的配置发生变更时,现有的 dao / redis 如何立刻断掉原有链接,创建新的链接?
以上这些功能,是否能在框架层统一考虑、实现?

8 回复

我想先听听大家的意见

用了 apollo 之后自己创建并保存各数据库连接实例

用代码自已创建一个数据源及全局的dao,监听 apollo 配置变化,当变化发生后自己销毁数据源及dao并新建,这条路是通的,我过去也是这么干的,但总觉得不方便。
因为这类问题是一致的,如果能从框架层统一考虑就好了。这样业务逻辑只关注业务,不需要关心配置等东西的变化。

那替换过程中业务也会中断吧?或者出现在同一个页面逻辑内,前后连接到2个不同的数据库的情况?

切换的时刻可能会有些影响,但不会中断。
线上发布会分组,一组一组的换。组内有服务器也是先创建局部的变量,都初始化好后再替换全局变量。切换会有轻微的时间差,所有可能会有一部分业务连A Redis实例,一部分业务连B Redis实例的情况,切换完后也需要等待几秒、几十秒才能完全释放完A组的链接。
但一般情况下,A实例与B实例是对等的,因此切换正常情况下并不影响业务。

原来如此, 在发布的时候分组.

我之前想的方式是比较暴力的, 整个程序退出, 然后重启, 我考虑的点有:

A 数据库信息变更后,可能执行DDL, 例如建表,变更字段, 这些属于用户逻辑, 单纯更换数据源, 并不能触发用户的逻辑(起码不好配置吧?)
B 动态替换DataSource的话, 替换实例应该不容易, 所以只能做个DataSourceProxy之类的代理对象供NutDao使用, 感觉又多了一些问题

添加回复
请先登陆
回到顶部