如何在引导程序文件中正确设置不同的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.properties
, bootstrap-prod.properties
, bootstrap-stage.properties
和bootstrap-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