Ответ
Выбор зависит от типа настройки. Оптимален комбинированный подход:
-
@ConfigurationPropertiesдля структурированных настроек (наилучшая практика).- Зачем: Типизированный доступ к группам свойств, валидация через
@Validated.@Configuration @ConfigurationProperties(prefix = "app.api") @Validated public class ApiConfig { @NotBlank private String url; @Min(1000) private int timeoutMs; private List<String> supportedVersions; // Стандартные геттеры и сеттеры }# application.yml app: api: url: https://api.example.com timeout-ms: 5000 supported-versions: [v1, v2]
- Зачем: Типизированный доступ к группам свойств, валидация через
-
YAML-файлы (
application.yml) для внешней конфигурации.- Зачем: Читаемость, поддержка иерархических структур, возможность переопределения через профили (
application-prod.yml).
- Зачем: Читаемость, поддержка иерархических структур, возможность переопределения через профили (
-
Внешние источники для гибкости в production.
- Переменные окружения:
export DATABASE_URL=...(имеют наивысший приоритет). - Параметры командной строки:
java -jar app.jar --server.port=8081. - Spring Cloud Config / Consul: Для централизованного управления конфигурацией в микросервисной архитектуре.
- Переменные окружения:
-
@Valueдля простых, единичных свойств.@Value("${app.feature.enabled:false}") // :false - значение по умолчанию private boolean isFeatureEnabled; -
Программная конфигурация (
@Bean) для сложных, условных или динамически создаваемых бинов.
Итог: Используйте @ConfigurationProperties с YAML для большинства настроек, переменные окружения для секретов и чувствительных данных, а программную конфигурацию — для сложной логики создания бинов.