如何在引导程序文件中正确设置不同的Spring配置文件(对于Spring Boot,以针对不同的云配置服务器)?

每个环境都有不同的配置服务器。 每个Spring启动应用程序都应该以其相应的配置服 我试图通过在bootstrap.properties文件中设置配置文件来实现这一点,例如:

spring.application.name=app-name spring.cloud.config.uri=http://default-config-server.com --- spring.profiles=dev spring.cloud.config.uri=http://dev-config-server.com --- spring.profiles=stage spring.cloud.config.uri=http://stage-config-server.com --- spring.profiles=prod spring.cloud.config.uri=http://prod-config-server.com 

然后我设置cla -Dspring.profiles.active=dev但是加载的配置服务器始终是文件中设置的最后一个(即prod配置服务器将在上面的设置中加载,然后如果删除prod,阶段将加载)。

是否可以为云配置服务器设置引导配置文件? 我按照这个例子,但似乎无法使它工作。 对于它的价值,这些配置文件非常适合加载正确的配置(即,如果dev配置文件处于活动状态,则会加载app-name-dev.properties),但不会从正确的配置服务器中提取。

在单个文件中指定不同的配置文件仅支持YAML文件,不适用于属性文件。 对于属性文件,请指定特定于环境的bootstrap-[profile].properties以覆盖默认bootstrap.properties属性。

因此,在您的情况下,您将获得4个文件bootstrap.propertiesbootstrap-prod.propertiesbootstrap-stage.propertiesbootstrap-dev.properties

但是,您也可以只提供默认的bootstrap.properties并在启动应用程序时通过将-Dspring.cloud.config.uri=传递给您的应用程序来覆盖该属性。

 java -jar .jar -Dspring.cloud.config.uri= 

这将优先于默认配置值。

 I solved a similar problem with an environment variable in Docker. 

bootstrap.yml

 spring: application: name: dummy_service cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888/} enabled: true profiles: active: ${SPR_PROFILE:dev} 

Dockerfile

 ENV CONFIG_SERVER_URL="" ENV SPR_PROFILE="" 

泊坞窗,compose.yml

 version: '3' services: dummy: image: xxx/xxx:latest restart: always environment: - SPR_PROFILE=docker - CONFIG_SERVER_URL=http://configserver:8888/ ports: - 8080:8080 depends_on: - postgres - configserver - discovery