2016-12-05 29 views
5

Mamy różne serwery konfiguracji dla każdego środowiska. Każda aplikacja rozruchu wiosennego powinna być kierowana do odpowiedniego serwera konfiguracji. Starałem się to osiągnąć poprzez tworzenie profili w pliku bootstrap.properties, np:Jak prawidłowo ustawić różne profile Spring w pliku bootstrap (w Spring Boot, aby kierować różne serwery konfiguracji Cloud)?

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 

I wtedy ustawić CLA -Dspring.profiles.active=dev ale załadowany server config jest zawsze ostatni zestaw w pliku config (tj prod serwer byłby załadowany w powyższych ustawieniach, a następnie, jeśli prod zostanie usunięty, etap zostanie załadowany).

Czy można ustawić profile ładowania początkowego dla serwera konfiguracji w chmurze? Poszłam za this example, ale wydaje mi się, że nie działa. Dla tego, co jest warte, te profile działają świetnie, aby załadować poprawną konfigurację (tzn. App -name-dev.properties zostanie załadowana, jeśli profil dev jest aktywny), ale nie są pobierane z właściwego serwera konfiguracyjnego.

+1

To działa tylko dla plików nie yaml plików własności (AFAIK). Po prostu dodaj 'bootstrap- [profil] .properties', czyli' bootstrap-dev.properties', który zawiera potrzebną (nadpisaną) konfigurację. –

+0

@ M.Deinum To jest poprawna odpowiedź, dzięki! Dodaj to i przyjmuję. –

Odpowiedz

5

Określanie różnych profili w jednym pliku obsługuje tylko pliki YAML i nie ma zastosowania do plików właściwości. W przypadku plików właściwości określ środowisko specyficzne dla bootstrap-[profile].properties, aby nadpisać właściwości domyślnego bootstrap.properties.

W twoim przypadku otrzymasz 4 pliki bootstrap.properties, bootstrap-prod.properties, bootstrap-stage.properties i bootstrap-dev.properties.

Zamiast tego można jednak podać tylko domyślną wartość bootstrap.properties, a po uruchomieniu aplikacji należy przesłonić właściwość, przekazując do aplikacji numer -Dspring.cloud.config.uri=<desired-uri>.

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

Będzie to miało pierwszeństwo przed domyślnymi skonfigurowanymi wartościami.

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

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