您如何在Bootstrap文件中正确设置不同的春季配置文件(对于Spring Boot到目标不同的云配置服务器)



我们每个环境都有不同的配置服务器。每个春季启动应用程序应针对其相应的配置服务器。我试图通过在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,但是加载的配置服务器始终是文件中的最后一个集合(即产品配置服务器将加载在上面的设置中,然后如果删除了POR,则将加载阶段)。

是否可以为Cloud Config Server设置Bootstrap配置文件?我遵循了这个示例,但似乎无法正常工作。对于它的价值,这些配置文件可以很好地加载正确的配置(即,如果Dev配置文件处于活动状态,则将加载Properties,但不会从适当的配置服务器中提取。

<</p>

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

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

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

java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>

这将优先于默认配置的值。

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=""

docker-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

@larryw(我无法在同一评论中回答):

我想明确添加该属性的优点是,它允许您在不设置环境变量的情况下添加默认值(在这种情况下为" dev")。

相关内容

最新更新