@Value vs @ConfigurationProperties — кого выбрать?Часто вижу, как даже опытные разработчики по привычке используют
@Value для инъекции конфигурации:
@Value("${app.timeout}")
private Duration timeout;
⚠️ Но с ростом приложения
@Value становится хрупким и неудобным.📌 Лучший подход — использовать
@ConfigurationProperties:
@ConfigurationProperties(prefix = "app")
public record AppProperties(Duration timeout, String apiKey) {}
@Bean
@ConfigurationPropertiesBinding
public AppProperties appProperties() {
return new AppProperties();
}
✅ Преимущества
@ConfigurationProperties:- 💡 Группирует настройки логически
- 🔍 Работает с валидацией (
@Validated, @NotNull, и т.д.)- 📚 Отлично поддерживается IDE (автокомплит, рефакторинг)
- 🔧 Удобно тестировать и мокать
🆕 Начиная с Spring Boot 2.2+, можно использовать record-классы и просто зарегистрировать бин через
@EnableConfigurationProperties:
@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig {}
Так что, если у вас в проекте до сих пор десятки
@Value — самое время навести порядок.📲 Мы в MAX
👉@BookJava
