Spring Boot: внешняя конфигурация

Spring Boot позволяет вам настроить вашу конфигурацию, чтобы вы могли работать с одним и тем же кодом приложения в разных средах. Вы можете использовать файлы свойств (properties files), файлы YAML, переменные окружения и аргументы командной строки для внешней настройки конфигурации. Значения свойств могут быть введены непосредственно в ваши bean-компоненты с помощью аннотации @Value, доступ к которой осуществляется через абстракцию среды Spring или могут быть связаны со структурированными объектами через @ConfigurationProperties.

Spring Boot использует очень специфический порядок PropertySource, который предназначен для разумного переопределения значений. Свойства рассматриваются в следующем порядке:

  1. Свойства глобальных настроек Devtools в папке $HOME/.config/spring-boot, когда devtools активен.
  2. @TestPropertySource аннотации на ваших тестах.
  3. Атрибут свойств в ваших тестах. Доступно на @SpringBootTest и тестовых аннотациях для тестирования определенного фрагмента вашего приложения.
  4. Аргументы командной строки.
  5. Свойства из SPRING_APPLICATION_JSON (встроенный JSON (inline JSON), встроенный в переменную среды или системное свойство).
  6. Параметры инициализации ServletConfig.
  7. Параметры инициализации ServletContext.
  8. Атрибуты JNDI из java:comp/env.
  9. Системные свойства Java (System.getProperties()).
  10. Переменные среды ОС.
  11. RandomValuePropertySource, который имеет свойства только в случайном random.*.
  12. Специфичные для профиля свойства приложения за пределами вашего упакованного jar (application-{profile}.properties и YAML-варианты).
  13. Специфичные для профиля свойства приложения, упакованные внутри вашего jar (application-{profile}.properties и YAML-варианты).
  14. Свойства приложения за пределами вашего упакованного jar (application.properties и YAML варианты).
  15. Свойства приложения, упакованные внутри вашего jar (application.properties и YAML варианты).
  16. Аннотации @PropertySource для ваших классов @Configuration. Обратите внимание, что такие источники свойств не добавляются в среду до тех пор, пока не обновится контекст приложения. Это слишком поздно для настройки определенных свойств, таких как logging.* и spring.main.*, которые читаются перед началом обновления.
  17. Свойства по умолчанию (задаются установкой SpringApplication.setDefaultProperties).

Чтобы предоставить конкретный пример, предположим, что вы разрабатываете @Component, который использует свойство name, как показано в следующем примере:

import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;

@Component
public class MyBean {

    @Value("${name}")
    private String name;

    // ...

}

В вашем classpath приложения (например, внутри вашего jar-файла) у вас может быть файл application.properties, который предоставляет разумное значение свойства по умолчанию для имени. При запуске в новой среде файл application.properties может быть предоставлен вне вашего jar-файла, который переопределяет имя. Для одноразового тестирования вы можете запустить с определенным параметром командной строки (например, java -jar app.jar --name="Spring").

Свойства SPRING_APPLICATION_JSON можно указать в командной строке с помощью переменной среды. Например, вы можете использовать следующую строку в оболочке UNIX:

$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar

В предыдущем примере вы получите acme.name=test в среде Spring. Вы также можете указать JSON как spring.application.json в свойстве System, как показано в следующем примере:

$ java -Dspring.application.json='{"name":"test"}' -jar myapp.jar

Вы также можете указать JSON с помощью аргумента командной строки, как показано в следующем примере:

$ java -jar myapp.jar --spring.application.json='{"name":"test"}'

Вы также можете указать JSON как переменную JNDI следующим образом: java:comp/env/spring.application.json.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки