2016-12-05 2 views
5

У нас есть разные серверы конфигурации для каждой среды. Каждое приложение загрузки весны должно быть нацелено на соответствующий сервер конфигурации. Я пытался добиться этого путем установки профилей в файле bootstrap.properties, например:Как правильно настроить различные профили 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, но, похоже, не смог заставить его работать. Для чего это важно, эти профили отлично подходят для загрузки правильной конфигурации (например, app-name-dev.properties будет загружаться, если профиль dev активен), но не извлекаются из соответствующего конфигурационного сервера.

+1

Это будет работать только для YAML файлов не файлы свойств (AFAIK). Просто добавьте 'bootstrap- [profile] .properties' i.e.' bootstrap-dev.properties', который будет содержать необходимую (переопределенную) конфигурацию. –

+0

@ M.Deinum Это правильный ответ, спасибо! Добавьте это, и я соглашусь. –

ответ

5

Задание различных профилей в одном файле поддерживает только файлы YAML и не относится к файлам свойств. Для файлов свойств укажите среду bootstrap-[profile].properties для переопределения свойств по умолчанию bootstrap.properties.

Так что в вашем случае вы получите 4 файла bootstrap.properties, bootstrap-prod.properties, bootstrap-stage.properties и bootstrap-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 
Смежные вопросы