Как разрешить заполнитель в файле свойств со значениями из другого файла свойств в весенней загрузке приложения - PullRequest
0 голосов
/ 26 февраля 2019

Моё весеннее загрузочное приложение имеет следующие файлы свойств.

src/main/resources/config/DEV/env.properties
mail.server=dev.mail.domain

src/main/resources/config/QA/env.properties
mail.server=qa.mail.domain

src/main/resources/config/common/env.properties
mail.url=${mail.server}/endpoint

Можно ли загрузить "common / env.properties", чтобы его заполнители были разрешены с использованием данного файла свойств, специфичного для среды.Для среды DEV мы хотим, чтобы заполнители в "common / env.properties" были разрешены с использованием значений из "DEV / env.properties".

Есть ответы о том, как загрузить несколько файлов свойств и загрузка на основе профиляно не смог найти ответ для этого конкретного случая использования.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

2 Опции:

  1. Создайте common/application.properties с помощью configuration-maven-plugin и фильтруйте файлы для каждой среды.Он устарел.
  2. Используйте application-<env>.properties для каждой среды и передайте -Dspring.profiles.active=<env> в качестве опции ВМ при запуске приложения.Spring автоматически извлечет свойство из правильного файла.

В варианте 2 вы будете перезаписывать все, что присутствует в application.properties, с application-.properties.Таким образом, вам не нужно добавлять только свойства, которые вам нужно изменить для каждой среды.

, например:

Ваш application.properties может иметь

logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=WARN

Ваш application-dev.properties может иметь

logging.level.org.springframework=DEBUG

, что означает, что при запуске приложения с использованием профиля dev пружина занимает

logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=DEBUG

редактировать:

Также вы можете попробоватьчто-то вроде ниже в вашем классе.(Spring перезапишет значение в config.properties значениями из config-dev.properties).ignoreResourceNotFound убедится, что приложение все равно будет запускаться со значениями по умолчанию, даже если соответствующий файл не найден.

@Configuration
@PropertySource("classpath:config.properties")
@PropertySource(value = "classpath:config-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
0 голосов
/ 26 февраля 2019

Вы можете добавить файл resources / application.yml, в котором вы можете иметь несколько профилей в одном файле. MultiProfile Yaml например, есть два разных профиля 'dev' и 'qa' с разными applicationNames 'DEV' и 'QA' и одно defaultName 'Default'

spring:
  application:
    name: Default
  profiles:
    active: qa

---
spring:
  profiles: dev
  application:
    name: DEV
---
spring:
  profiles: qa
  application:
    name: QA
0 голосов
/ 26 февраля 2019

Этого можно добиться, объявив источник свойства в конфигурации класса и установив переменную среды по пути:

@PropertySource({ "classpath:config/${env}/env.properties" })
@Configuration
public class config{}

И затем вы запустите приложение весенней загрузки с переменной командной строки -env=dev

ОБНОВЛЕНИЕ

Вы можете использовать аннотацию @PropertySources для загрузки нескольких свойств.

 @PropertySources({
    @PropertySource("classpath:config/${env}/env.properties"),
    @PropertySource("classpath:config/common/env.properties")
  })
  public class config{}
...