1. Обзор
Одним из способов настройки приложений Spring является использование файлов конфигурации YAML.
В этой краткой статье мы настроим различные профили для простого приложения Spring Boot с использованием YAML.
Дальнейшее чтение:
Краткое руководство по Spring @Value
Использование Spring @Value по умолчанию
Как ввести значение свойства В класс, Не Управляемый Spring?
2. Весенний файл YAML
Профили пружин помогают приложениям Spring определять различные свойства для различных сред.
Ниже приведен простой файл YAML, содержащий два профиля. Три тире, разделяющие два профиля, указывают на начало нового документа, поэтому все профили могут быть описаны в одном файле YAML.
Относительный путь к файлу application.yml – это /MyApplication/src/main/resources/application.yml:
spring: config: activate: on-profile: test name: test-YAML environment: testing enabled: false servers: - www.abc.test.com - www.xyz.test.com --- spring: config: activate: on-profile: prod name: prod-YAML environment: production enabled: true servers: - www.abc.com - www.xyz.com
Обратите внимание, что эта настройка не подразумевает, что какой-либо из этих профилей будет активен при запуске нашего приложения, свойства, определенные в документах, относящихся к профилю, не будут загружены, если мы явно не укажем это; по умолчанию единственным активным профилем будет ” default “.
3. Привязка YAML к классу конфигурации
Чтобы загрузить набор связанных свойств из файла свойств, мы создадим класс bean:
@Configuration @EnableConfigurationProperties @ConfigurationProperties public class YAMLConfig { private String name; private String environment; private boolean enabled; private Listservers = new ArrayList<>(); // standard getters and setters }
Здесь используются следующие аннотации:
- @Configuration помечает класс как источник определений компонентов
- @ConfigurationProperties привязывает и проверяет внешние конфигурации к классу конфигурации
- @EnableConfigurationProperties эта аннотация используется для включения @ConfigurationProperties аннотированных компонентов в приложении Spring
4. Доступ к свойствам YAML
Чтобы получить доступ к свойствам YAML, мы создаем объект класса YAML Config и получаем доступ к свойствам с помощью этого объекта.
В файле свойств давайте установим переменную среды spring.profiles.active в prod . Если мы не определим это свойство , будет активен только профиль по умолчанию|/.
Относительный путь к файлу свойств – /MyApplication/src/main/resources/application.properties.
spring.profiles.active=prod
В этом примере мы показываем свойства с помощью CommandLineRunner.
@SpringBootApplication public class MyApplication implements CommandLineRunner { @Autowired private YAMLConfig myConfig; public static void main(String[] args) { SpringApplication app = new SpringApplication(MyApplication.class); app.run(); } public void run(String... args) throws Exception { System.out.println("using environment: " + myConfig.getEnvironment()); System.out.println("name: " + myConfig.getName()); System.out.println("enabled:" + myConfig.isEnabled()); System.out.println("servers: " + myConfig.getServers()); } }
Вывод в командной строке:
using environment: production name: prod-YAML enabled: true servers: [www.abc.com, www.xyz.com]
5. Переопределение свойства YAML
В Spring Boot файлы YAML могут быть переопределены другими файлами свойств YAML.
До версии 2.4.0 свойства YAML были переопределены файлами свойств в следующих расположениях в порядке наибольшего приоритета:
- Свойства профилей, размещенных вне упакованной банки
- Свойства профилей, упакованных в упакованную банку
- Свойства приложения, размещенные вне упакованной банки
- Свойства применения упакованные внутри упакованной банки
Начиная с Spring Boot 2.4, внешний файл всегда переопределяет упакованные файлы, независимо от того, является ли он специфичным для профиля или нет.
6. Заключение
В этой краткой статье мы рассмотрели, как настроить свойства в приложениях Spring Boot с помощью YAML. Мы также видели правила переопределения свойств, которым следует Spring Boot для файлов YAML.
Код для этой статьи доступен на GitHub.