2016-12-05 50 views
5

我們有不同的配置服務器每個環境。每個Spring引導應用程序都應該指向其相應的配置服務器我試圖通過在bootstrap.properties文件中設置的配置文件,如要實現這一點:如何在bootstrap文件中正確設置不同的Spring配置文件(用於Spring Boot以定位不同的Cloud Config服務器)?

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,則會加載舞臺)。

是否可以爲雲配置服務器設置引導配置文件?我跟着this example,但似乎無法得到它的工作。對於它的價值,這些配置文件非常適合加載正確的配置(即,如果dev配置文件處於活動狀態,則會加載app-name-dev.properties),但不會從正確的配置服務器中提取配置文件。

+1

一個僅用於YAML文件沒有財產文件的工作(據我所知)。只需添加'bootstrap- [profile] .properties',即'bootstrap-dev.properties',它將包含所需的(重寫)配置。 –

+0

@ M.Deinum這是正確的答案,謝謝!補充一點,我會接受。 –

回答

5

在單個文件中指定不同的配置文件僅支持YAML文件,不適用於屬性文件。對於屬性文件,指定特定環境bootstrap-[profile].properties以覆蓋默認的bootstrap.properties的屬性。

所以在你的情況下,你會得到4個文件bootstrap.properties,bootstrap-prod.properties, bootstrap-stage.propertiesbootstrap-dev.properties

但是,您也可以僅提供默認的bootstrap.properties,並在啓動應用程序時通過將-Dspring.cloud.config.uri=<desired-uri>傳遞給應用程序來覆蓋該屬性。

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

這將優先於默認的配置值。

0
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 
相關問題