@Value vs @ConfigurationProperties — не выбирай наобумОба способа хороши для конфигурации, но используют их по-разному. И если ты всё ещё везде пихаешь
@Value, держи краткий гайд, когда лучше что:📌
@Value — просто, но не гибко:
@Value("${my.prop}")
private String value;
✅ Хорошо для единичных значений
❌ Плохо для сложных структур, списков, валидации
❌ Трудно покрыть тестами (без
TestPropertySource)❌ Нет биндинга по префиксу → нет группировки
📌
@ConfigurationProperties — сила и масштаб:
@ConfigurationProperties(prefix = "app.feature")
public class FeatureProperties {
private boolean enabled;
private List<String> items;
}
💡 Используй с
@EnableConfigurationProperties или аннотируй как @Component✅ Удобно группировать и документировать
✅ Работает с вложенными структурами, коллекциями
✅ Поддерживает JSR-303 валидацию (
@Validated)✅ Легче мокать в тестах
✅ Интеграция с Spring Boot Actuator (
/actuator/configprops)⚠️ Не смешивай: не нужно тянуть
@Value внутрь @ConfigurationProperties — это антипаттерн.Если конфигурация простая —
@Value норм. Но как только появляется структура, коллекции, логика — всегда используй @ConfigurationProperties.📲 Мы в MAX
👉@BookJava
