1. Обзор
Одним из способов настройки приложений Spring является использование файлов конфигурации YAML.
В этом кратком руководстве мы настроим различные профили для простого приложения Spring Boot с использованием YAML.
2. Весенний YAML-файл
Профили Spring помогают приложениям 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 к классу конфигурации
Чтобы загрузить набор связанных свойств из файла свойств, мы создадим класс компонента:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
private String name;
private String environment;
private boolean enabled;
private List<String> servers = new ArrayList<>();
// standard getters and setters
}
Аннотации, используемые здесь:
@Configuration —
помечает класс как источник определений bean-компонентов.@ConfigurationProperties
— связывает и проверяет внешние конфигурации в классе конфигурации.@EnableConfigurationProperties
— эта аннотация используется для включенияаннотированных компонентов @ConfigurationProperties
в приложении Spring.
4. Доступ к свойствам YAML
Чтобы получить доступ к свойствам YAML, мы создадим объект класса YAMLConfig
и получим доступ к свойствам, используя этот объект.
В файле свойств мы установим для переменной среды 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 переопределялись файлами свойств в следующих местах в порядке наивысшего приоритета:
- Свойства профилей, размещенные за пределами упакованной банки
- Свойства профилей, упакованные внутри упакованного jar
- Свойства приложения, размещенные за пределами упакованной банки
- Свойства приложения, упакованные внутри упакованного jar
Начиная с Spring Boot 2.4, внешние файлы всегда переопределяют упакованные файлы, независимо от того, относятся ли они к профилю или нет.
6. Заключение
В этой краткой статье мы узнали, как настраивать свойства в приложениях Spring Boot с помощью YAML. Мы также обсудили правила переопределения свойств, которым следует Spring Boot для файлов YAML.
Код для этой статьи доступен на GitHub.