272.74K
Category: programmingprogramming

Spring. Внешняя конфигурация

1.

Spring
Внешняя конфигурация

2.

Как мы можем внедрять конфиги:
1. Через аргументы командной строки
2. Через переменные среды
3. Через файлы .properties или .yml

3.

Source: command line argument
• Имеют приоритет над остальными внешними конфигами
• Можно передавать в JSON структуре
• java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}’
• При необходимости можно запретить преобразование аргументов в
свойства

4.

Source: OS environment
• Имеют приоритет над переменными из файлов
• Также можно передавать в JSON структуре
• SPRING_APPLICATION_JSON ='{"my":{"name":"test"}}'
• Нотация следующая: верхний регистр с нижними подчеркиваниями
• Важно указывать префикс, так как среда может использоваться
одновременно несколькими Spring Boot приложениями с разными
параметрами

5.

Source: конфигурационные файлы
• Могут быть в формате .properties и .yml.
• В случае если в наличии и те и те, приоритет .properties
• .yml нельзя использовать в @PropertySource или @TestPropertySource, для этого нужно
подключать отдельные библиотеки
• Могут лежать в: classpath:/,classpath:/config/,file:./,file:./config/.
• Можно настроить собственное местоположение и нейминг
• Можно настроить несколько файлов для разных профилей
• Хранение паролей и т.д. открытое
• Можно явно импортировать данные из других файлов
• Можно рандомизировать значения (например генерировать UUID)
• my.uuid =${random.uuid}

6.

Какие есть варианты доступа из
приложения
1. С помощью аннотации @Value
2. С помощью аннотации @ConfigurationProperty
3. Напрямую из объекта Environment

7.

@Value
• Базовый механизм
• Поддерживает SpEL – а значит имеет фишки типа дефолтных значений и различных конвертаций
public ObjectConstructor(@Value("${service.props: defaultProperties}") String props) {
this. props = props;
}

8.

@ConfiguratonProperty
• Механизм Relaxed Binding. Позволяет не иметь точного совпадения между именем свойства во
внешней конфигурации и именем свойства в классе. Допустимы:
• для переменных среды – НОТАЦИЯ_ВЕРХНЕГО_РЕГИСТРА
• для .yml, . properties файлов и системных переменных – верблюжьяНотация, нотация_с_подчеркиванием и
кебаб-нотация
• кебаб-нотация – рекомендуется для .yml и .properties файлах
• Механизм позволяющий провалидировать свойства, срабатывающий в самом старте жизненного
цикла приложения
• Механизм позволяющий настроить собственную конвертацию данных внешней конфигурации в наши
объекты
• Механизм поддержки метаданных

9.

Диагностика
• actuator/env
• actuator/configprops

10.

Работа со списками:
• Для yaml файлов конфигурации:
my:
servers:
- dev.example.com
- another.example.com
• Для properties файлов конфигурации:
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
• Для CLI – в зависимости от оболочки
• Для env values:
MY_SERVERS_0 = dev.example.com
MY_SERVERS_1 = another.example.com
• Если настроены более чем в одном месте или на нескольких уровнях
конфигурации, заменяется весь список

11.

Фишки конвертации типов:
• java.time.Duration – от секунд до дней
• my_value = 10s
• java.time.Period – от дней до лет
• 10y
• org.springframework.util.unit.DataSize – от байт до терабайт
• 10GB
English     Русский Rules