Рубрики
Без рубрики

Использование приложения.yml vs application.properties в весенней загрузке

Spring Boot поддерживает как .properties, так и YAML. Мы исследуем различия между свойствами инъекций и способы обеспечения нескольких конфигураций.

Автор оригинала: baeldung.

1. Обзор

Обычной практикой в Spring Boot является использование внешней конфигурации для определения наших свойств . Это позволяет нам использовать один и тот же код приложения в разных средах.

Мы можем использовать файлы свойств, файлы YAML, переменные среды и аргументы командной строки.

В этом коротком уроке мы рассмотрим основные различия между файлами свойств и файлами YAML.

2. Конфигурация свойств

По умолчанию Spring Boot может получить доступ к конфигурациям, заданным в файле application.properties , который использует формат ключ-значение:

spring.datasource.url=jdbc:h2:dev
spring.datasource.username=SA
spring.datasource.password=password

Здесь каждая строка представляет собой единую конфигурацию. Поэтому мы должны выражать иерархические данные, используя одни и те же префиксы для наших ключей. И в этом примере каждый ключ принадлежит spring.datasource.

2.1. Заполнители в свойствах

В наших значениях мы можем использовать заполнители с синтаксисом ${} для ссылки на содержимое других ключей, системных свойств или переменных среды.

app.name=MyApp
app.description=${app.name} is a Spring Boot application

2.2. Структура списка

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

application.servers[0].ip=127.0.0.1
application.servers[0].path=/path1
application.servers[1].ip=127.0.0.2
application.servers[1].path=/path2
application.servers[2].ip=127.0.0.3
application.servers[2].path=/path3

2.3. Несколько Профилей

Начиная с версии 2.4.0, Spring Boot поддерживает создание файлов свойств нескольких документов. Проще говоря, мы можем разделить один физический файл на несколько логических документов.

Это позволяет нам определить документ для каждого профиля, который нам нужно объявить, все в одном файле:

logging.file.name=myapplication.log
bael.property=defaultValue
#---
spring.config.activate.on-profile=dev
spring.datasource.password=password
spring.datasource.url=jdbc:h2:dev
spring.datasource.username=SA
bael.property=devValue
#---
spring.config.activate.on-profile=prod
spring.datasource.password=password
spring.datasource.url=jdbc:h2:prod
spring.datasource.username=prodUser
bael.property=prodValue

Примечание. Мы используем обозначение”# – – -“, чтобы указать, где мы хотим разделить документ.

В этом примере у нас есть две секции spring с разными профилями тегами. Кроме того, мы можем иметь общий набор свойств на корневом уровне — в данном случае файл logging.file.имя свойство будет одинаковым во всех профилях.

2.4. Профили В Нескольких Файлах

В качестве альтернативы наличию разных профилей в одном файле мы можем хранить несколько профилей в разных файлах. До версии 2.4.0 это был единственный метод, доступный для файлов properties .

Мы достигаем этого, помещая имя профиля в имя файла — например, application-dev.yml или application-dev.properties .

3. Конфигурация YAML

3.1. Формат YAML

Помимо файлов свойств Java, мы также можем использовать файлы конфигурации на основе YAML в нашем приложении Spring Boot. YAML-это удобный формат для указания данных иерархической конфигурации|/.

Теперь давайте возьмем тот же пример из нашего файла свойств и преобразуем его в YAML:

spring:
    datasource:
        password: password
        url: jdbc:h2:dev
        username: SA

Это может быть более читаемым, чем его альтернатива файлу свойств, поскольку он не содержит повторяющихся префиксов.

3.2. Структура списка

YAML имеет более сжатый формат для выражения списков:

application:
    servers:
    -   ip: '127.0.0.1'
        path: '/path1'
    -   ip: '127.0.0.2'
        path: '/path2'
    -   ip: '127.0.0.3'
        path: '/path3'

3.3. Несколько профилей

В отличие от файлов свойств, YAML поддерживает многодокументные файлы по дизайну, поэтому мы можем хранить несколько профилей в одном файле независимо от того, какую версию Spring Boot мы используем.

В этом случае, однако, спецификация указывает, что мы должны использовать три тире, чтобы указать начало нового документа :

logging:
  file:
    name: myapplication.log
---
spring:
  config:
    activate:
      on-profile: staging
  datasource:
    password: 'password'
    url: jdbc:h2:staging
    username: SA
bael:
  property: stagingValue

4. Использование Пружинной загрузки

Теперь, когда мы определили наши конфигурации, давайте посмотрим, как получить к ним доступ.

4.1. Аннотация значения

Мы можем ввести значения наших свойств, используя аннотацию @Value :

@Value("${key.something}")
private String injectedProperty;

Здесь свойство key.something вводится через инъекцию поля в один из наших объектов.

4.2. Абстракция среды

Мы также можем получить значение свойства с помощью Environment API:

@Autowired
private Environment env;

public String getSomeKey(){
    return env.getProperty("key.something");
}

4.3. Аннотация свойств конфигурации

Наконец, мы также можем использовать аннотацию @ConfigurationProperties для привязки наших свойств к типобезопасным структурированным объектам:

@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
    String name;
    String description;
...

5. Заключение

В этой статье мы рассмотрели некоторые различия между файлами конфигурации properties и yml Spring Boot. Мы также видели, как их значения могут относиться к другим свойствам. Наконец, мы рассмотрели, как ввести значения в нашу среду выполнения.

Как всегда, все примеры кода доступны на GitHub .