如何在引导程序文件中正确设置不同的Spring配置文件(Spring Boot以不同的Cloud Config服务器为目标)?

dev*_*eed 14 java spring-profiles spring-boot spring-cloud-config

每个环境都有不同的配置服务器.每个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
Run Code Online (Sandbox Code Playgroud)

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

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

M. *_*num 17

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

所以你的情况,你会得到4个文件bootstrap.properties,bootstrap-prod.properties,bootstrap-stage.propertiesbootstrap-dev.properties.

但是,除此之外,您还可以仅提供默认值,bootstrap.properties并在启动应用程序时通过将a传递-Dspring.cloud.config.uri=<desired-uri>给您的应用程序来覆盖该属性.

java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>
Run Code Online (Sandbox Code Playgroud)

这将优先于默认配置值.


jet*_*ton 8

I solved a similar problem with an environment variable in Docker. 
Run Code Online (Sandbox Code Playgroud)

引导程序.yml

spring:
  application:
    name: dummy_service
  cloud:
    config:
      uri: ${CONFIG_SERVER_URL:http://localhost:8888/}
      enabled: true
  profiles:
    active: ${SPR_PROFILE:dev}
Run Code Online (Sandbox Code Playgroud)

文件

ENV CONFIG_SERVER_URL=""
ENV SPR_PROFILE=""
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接在 Docker 中设置 `SPRING_PROFILES_ACTIVE`(在环境中),并跳过 bootstrap.yml 中的 `spring.profiles.active`? (2认同)