Ответ
Да, переопределяют. Spring Boot использует иерархию источников свойств (Property Sources), где переменные окружения имеют более высокий приоритет, чем значения в application.properties или application.yml.
Порядок приоритета (от высшего к низшему):
- Аргументы командной строки (например,
--app.name=CLIValue). - Переменные окружения (например,
APP_NAME=EnvValue). - Файлы свойств профиля (например,
application-prod.properties). - Основные файлы свойств (
application.properties).
Почему это полезно? Это основа 12-факторного приложения, позволяющая менять конфигурацию (пароли, URLs) между средами (dev, prod) без изменения кода.
Пример:
application.properties:
database.url=jdbc:h2:mem:localdb
Установка переменной окружения в OS или контейнере:
export DATABASE_URL=jdbc:postgresql://prod-host:5432/proddb
В коде Spring Boot аннотация @Value или Environment получит значение из переменной окружения:
@Value("${database.url}")
private String dbUrl; // Будет равно "jdbc:postgresql://prod-host:5432/proddb"
Важное правило именования: Spring Boot автоматически преобразует имена переменных окружения: DATABASE_URL → database.url (верхний регистр и подчеркивания заменяются на нижний регистр и точки).