spring cloud配置来自本地文件系统和git repo的属性

Swe*_*a V 7 cloud spring-boot spring-cloud

我使用spring cloud配置服务器来托管项目中使用的所有属性文件配置的集中位置.我尝试使用下面的本地文件系统中的配置文件,它工作正常:

spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file://${HOME}/Documents/test-config/cloud-config-properties/
Run Code Online (Sandbox Code Playgroud)

我还使用了git repo: spring.cloud.config.server.git.uri=ssh://xxxxxx.com:7999/test/cloud-config-properties.git

我想在我的项目中尝试使用它的组合.示例 - 对于开发/测试配置文件 - 我想从本地文件系统使用和生产 - 我想使用Git存储库.我在配置服务器应用程序的application.properties中启用了git uri和native配置文件.但是始终从本地文件系统中获取属性.这可能吗?

Ami*_*ein 4

不支持开箱即用,但有一个解决方法。您可以通过设置属性(在配置服务器中)为配置服务器定义 basedir,这是它保存从远程服务器获取的文件的位置:

spring.cloud.config.server.git.basedir=<your_dir>
Run Code Online (Sandbox Code Playgroud)

如果您正在使用 docker,则可以将此目录映射到主机文件系统。

现在,无论您放入其中的任何文件,如果它与请求中的任何应用程序/配置文件匹配,都将被配置服务器拾取。例如,您可以在其中放置一个名为 application-dynamic.properties 的文件,并让所有客户端使用动态作为最后一个配置文件,例如

spring.profiles.active=systesting,dynamic
Run Code Online (Sandbox Code Playgroud)

这样,您放入 application-dynamic.properties 中的所有内容都将覆盖配置存储库中定义的内容。

但需要注意的一件事是,您只需要在配置服务器启动后添加该文件,因为它会在启动过程中删除该文件夹。

不用说,在生产中这样做并不是一个好的做法(例如重新启动将导致文件被删除),但对于测试/开发来说这是最好的选择。