Spring не принимает переменные окружения - PullRequest
0 голосов
/ 11 марта 2019

В моем проекте у меня есть отдельные файлы application.yml для каждой среды, внутри каждой папки для среды .

one yml file for each env

ПРИМЕЧАНИЕ: ниже красный цвет yml файла сделан временно, чтобы код работал.Но следует удалить это после исправления.Поэтому я хочу использовать отдельный файл application.yml в зависимости от среды. Специально мне нужно использовать local / application.yml для локальной разработки

Ниже приведен пример получения переменных env в моем проекте

@Component
@Configuration
public class ApplicationProperties {
    @Value("${ex.my.url}")
    private String myServiceUrl;
   // getters setters and nedded stuff
}

Но это не такработать, так как не мог найти способ упомянуть необходимую среду.Потому что это в отдельной папке.Во всех других примерах упоминается способ получить файл yml внутри папки ресурсов без использования отдельных папок.

Есть ли решение проблемы?

Ответы [ 4 ]

0 голосов
/ 11 марта 2019

Классическое решение - настроить один файл конфигурации (Я предпочитаю свойства, потому что я в здравом уме) и разрешить размещение файла переопределений на каждом установленном хосте.

Spring поддерживает это из коробки.

Вот пример:

public static void main(final String[] argumentArray)
{
  final StringApplicationBuilder springApplicationBuilder;

  springApplicationBuilder = new SpringApplicationBuilder(YourSpringBootApplication.class)

  springApplicationBuilder.properties(
    "spring.config.location=classpath:/yourConfig.properties,/some/path/to/overrides/directory/yourConfig.properties");

  springApplicationBuilder.build().run(argumentArray);
}
0 голосов
/ 11 марта 2019

В папке ресурсов

Сделайте файл application.yml, application-local.yml, application-dev.yml и т. Д. Все, что вы хотите

, а затем в приложении.yml

 spring.profile.active = ${ENV}

теперь во время выполнения укажите переменные ENV из конфигурации run / debug в Intellij или укажите профиль, для которого вы хотите создать jar, в application.yml.

Alternative,Вы можете использовать -D spring.profile.active = dev

0 голосов
/ 11 марта 2019

сначала из документации :

SpringApplication загружает свойства из файлов application.properties в следующих местах и ​​добавляет их в среду Spring:

  1. Подкаталог A / config текущего каталога
  2. Текущий каталог
  3. Пакет classpath / config
  4. Корень пути к классу

Итак, с пройденной иерархией каталогов у вас возникнут проблемы.

в секунду, для спецификации файла вы можете использовать Profiles .Это работает следующим образом:

  • , если не указано ни одного профиля - application.properties будет использоваться
  • , для любого дополнительного профиля также будет использоваться профиль с именем application-<name>.properties

Таким образом, если вы укажете профили dev и cool, будут использоваться свойства application.properties, application-dev.properties, `application-cool.properties *

ОБНОВЛЕНИЕ:

Вы можете передать spring.config.location для указания пути к файлу свойств, но если вы хотите, чтобы иерархия каталогов была такой же, как у вас - вам нужны некоторые настройки с использованием context.initializers.classes и ApplicationContextInitializer

0 голосов
/ 11 марта 2019

В моих проектах я указываю профиль с параметром VM: -Dspring.profiles.active = local

Затем у меня есть файл с именем application-local.yml

:-Dspring.profiles.active = prod, будет использовать файл application-prod.yml

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