springboot 项目可以动态获取数据库配置吗?

2023-02-23 10:07:15 +08:00
 godleon

需求

例 springboot 项目,里面会有 mysql 配置如下:

 spring:
  datasource:
    #数据源基本配置
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:9999/database_v2
    

想问问怎么能把这个配置在上线的时候隐藏掉?或者动态获取、自己能控制最好

4754 次点击
所在节点    程序员
50 条回复
smalljop
2023-02-23 10:08:23 +08:00
配置中心了解一下 或者从环境变量读取
wetalk
2023-02-23 10:12:36 +08:00
Spring Cloud Consul
urnoob
2023-02-23 10:15:14 +08:00
不放配置文件 放在环境变量里
theqiang
2023-02-23 10:15:20 +08:00
1. “--spring.profiles.active=local”
2. AbstractRoutingDataSource
WashFreshFresh
2023-02-23 10:17:39 +08:00
简单点两套配置不好吗
lsk569937453
2023-02-23 10:17:40 +08:00
本质上缺一个配置中心。
yooomu
2023-02-23 10:17:43 +08:00
如果是单体项目,自己创建一个 datasource 放进容器就行了,具体数据可以从环境变量,本地文件,http 请求等等任何途径获取
bai4246464
2023-02-23 10:21:12 +08:00
nacos ?
tonyli
2023-02-23 10:25:50 +08:00
当然可以,还可以动态添加,动态删减呢
tonyli
2023-02-23 10:26:29 +08:00
前提是你需要确认一个介质你的配置存储在哪里?
wellerman
2023-02-23 10:33:15 +08:00
用携程的 apollo-client 库(可以参考 ruoyi 的老版本),没必要用 nacos ,太重。
wxw752
2023-02-23 10:36:13 +08:00
nacos
git00ll
2023-02-23 10:37:11 +08:00
apollo nacos, 推荐 apollo 写的很好
litchinn
2023-02-23 10:55:28 +08:00
我并没有充分理解你的动态获取配置和隐藏掉是什么意思,但通常这种问题分以下情况:

1. 只是不想配置在 jar 包里,那可以采取楼上说的配置中心的方式。

2. 不同环境部署不想每次因为切换数据库就重新打包,那么只需要在 yml 中使用环境变量的方式配置。

3. 发布时并不知道数据库信息,数据库由用户自己配置,那么可以通过读取配置文件的方式手动创建 DataSource ,当没有配置文件时由用户在页面输入后创建配置文件。

4. 因为业务需要动态切换不同类型或不同地址数据库,有一些开源的动态数据源的库,例如: https://github.com/baomidou/dynamic-datasource-spring-boot-starter

如果都不是,那么你应该详细描述你的需求。
xuanbg
2023-02-23 10:57:28 +08:00
@smalljop 可以动态获取到,但貌似需要重启链接池才能生效。
godleon
2023-02-23 10:58:37 +08:00
@litchinn 说场景吧,现在我有个 springboot 项目 p1 ,部署到云服务器 c1, 这时候我要在我本地不进入到 c1 服务器的情况下,能修改 p1 的 mysql 数据库配置,排除注册中心,因为我一个单体项目,一共不到 10 个接口,我在加依赖,在外部启动注册中心,这就有点太麻烦了
urnoob
2023-02-23 11:01:37 +08:00
oneisall8955
2023-02-23 11:13:38 +08:00
部署前,获取数据库链接的接口打开,部署后,把接口关了?
mscorlib
2023-02-23 11:16:33 +08:00
1. 通过 active profile 的方式来指定不同的 profile 文件
2. 注入 ApplicationContext , 通过 ApplicationContext.getBean(""),来获取不同的 DataSource ;至于 bean name 怎么来,方法有很多:配置文件,环境变量,数据库都可以
最简单的可控的做法:程序中管理具体用哪个数据源,但是需要一个基础库来存配置
godleon
2023-02-23 11:19:18 +08:00
@oneisall8955 你这个可以实现,这不是就看怎么样更优雅的实现

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

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

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

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

© 2021 V2EX