Ответ
В Spring Boot конфигурации загружаются в строгом порядке, где более высокий приоритет переопределяет более низкий. Порядок от высшего к низшему:
- Аргументы командной строки (
--property=value) - JNDI-атрибуты из
java:comp/env - Java System Properties (
System.getProperties()) - Переменные окружения ОС
- Профильные файлы конфигурации (
application-{profile}.properties/.yml) - Основной файл конфигурации (
application.properties/.yml) - Аннотация
@PropertySource - Значения по умолчанию (через
SpringApplication.setDefaultProperties)
Почему такой порядок? Он позволяет гибко управлять конфигурацией: переопределять настройки для конкретного окружения (например, через переменные окружения на продакшене) или для конкретного запуска (через аргументы командной строки).
Пример с профилями:
// application.properties (низкий приоритет)
app.name=DefaultApp
server.port=8080
// application-dev.properties (загружается при активном профиле 'dev')
app.name=DevApp
@Value("${app.name}")
private String appName; // Будет "DevApp", если активен профиль 'dev'
Важно: Внутри одного уровня приоритета (например, файлы) формат .yml имеет приоритет над .properties.