Similar presentations:
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