Spring Boot: внешняя конфигурация
Spring Boot позволяет вам настроить вашу конфигурацию, чтобы вы могли работать с одним и тем же кодом приложения в разных средах. Вы можете использовать файлы свойств (properties files), файлы YAML, переменные окружения и аргументы командной строки для внешней настройки конфигурации. Значения свойств могут быть введены непосредственно в ваши bean-компоненты с помощью аннотации @Value, доступ к которой осуществляется через абстракцию среды Spring или могут быть связаны со структурированными объектами через @ConfigurationProperties.
Spring Boot использует очень специфический порядок PropertySource, который предназначен для разумного переопределения значений. Свойства рассматриваются в следующем порядке:
- Свойства глобальных настроек Devtools в папке $HOME/.config/spring-boot, когда devtools активен.
- @TestPropertySource аннотации на ваших тестах.
- Атрибут свойств в ваших тестах. Доступно на @SpringBootTest и тестовых аннотациях для тестирования определенного фрагмента вашего приложения.
- Аргументы командной строки.
- Свойства из SPRING_APPLICATION_JSON (встроенный JSON (inline JSON), встроенный в переменную среды или системное свойство).
- Параметры инициализации ServletConfig.
- Параметры инициализации ServletContext.
- Атрибуты JNDI из java:comp/env.
- Системные свойства Java (System.getProperties()).
- Переменные среды ОС.
- RandomValuePropertySource, который имеет свойства только в случайном random.*.
- Специфичные для профиля свойства приложения за пределами вашего упакованного jar (application-{profile}.properties и YAML-варианты).
- Специфичные для профиля свойства приложения, упакованные внутри вашего jar (application-{profile}.properties и YAML-варианты).
- Свойства приложения за пределами вашего упакованного jar (application.properties и YAML варианты).
- Свойства приложения, упакованные внутри вашего jar (application.properties и YAML варианты).
- Аннотации @PropertySource для ваших классов @Configuration. Обратите внимание, что такие источники свойств не добавляются в среду до тех пор, пока не обновится контекст приложения. Это слишком поздно для настройки определенных свойств, таких как logging.* и spring.main.*, которые читаются перед началом обновления.
- Свойства по умолчанию (задаются установкой 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.
Читайте также:
- Spring Boot: класс SpringApplication
- Spring Boot: SpringApplication, доступ к аргументам приложения
- Spring Boot: события приложения и слушатели
Комментарии
Отправить комментарий