Файл с несколькими свойствами для одного профиля пружины - PullRequest
0 голосов
/ 13 мая 2019

Мы используем пружинный ботинок 2.0.0.У нас есть три окружения dev, staging, production.Наша текущая структура конфигурации

dev

application-dev.yml
application-dev.properties

Аналогично, у нас есть файлы yml и properties для каждой среды.Теперь, после года разработки, один yml файл для профиля стал большой монолитной конфигурацией.

возможно ли иметь несколько конфигурационных файлов для профиля, как показано ниже?

application-dev.yml
application-dev-sqs.yml
application-dev-redis.yml

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Да, это возможно.spring.config.location используется для вывода местоположения файла конфигурации в загрузочных приложениях Spring.Это может быть использовано для указания местоположения файла в файловой системе или даже в пути к классам.В зависимости от того, как вы хотите предоставить приложению доступ к файлам, вы можете выбрать URI.

Выполнение этого программно:

@SpringBootApplication
public class Application {

  public static void main(String[] args) {

    ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(Application.class)
        .properties("spring.config.location:classpath:/application-dev.yml,classpath:/application-dev-sqs.yml,classpath:/application-dev-redis.yml")
        .build()
        .run(args);
    }
}

Выполнение этого с помощью переменных среды:

set SPRING_CONFIG_LOCATION=classpath:/application-dev.yml, \
  classpath:/application-dev-sqs.yml, \
  classpath:/application-dev-redis.yml 

Таким образом, вы можете предоставить свои файлы в виде значений, разделенных запятыми.

Я использовал classpath здесь, это также может быть местоположение в файловой системе:

/home/springboot-app/properties/application-dev.yml,/home/springboot-app/properties/application-sqs.yml,/home/springboot-app/properties/application-redis.yml
1 голос
/ 13 мая 2019

Я думаю, что есть 2 способа выполнить это требование.

spring.profiles.active принимает список активных профилей через запятую, поэтому вы всегда можете указать dev,dev-sqs,dev-redis в качестве значения.

Другой подход заключается в использовании @PropertySource и пользовательского PropertySourceFactory для достижения этого требования.Вы можете найти реализацию, которая принимает значение от spring.profiles.active для загрузки одного соответствующего файла YAML, в статье ниже.Должно быть очень легко адаптировать реализацию для загрузки нескольких файлов путем поиска идентификатора профиля в имени файлов YAML.

[How-to] Считывание конфигураций YAML на основе профиля с помощью @PropertySource

0 голосов
/ 15 мая 2019

Вы уже пробовали включить профили?

Пример с профилем default, вы хотите загрузить дополнительные свойства для redis и db.В файле application.properties добавьте:

spring.profiles.include=redis, db

Это загрузит файлы application-redis.properties и application-db.properties соответственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...