Получить доступ

Чем @ConfigurationProperties удобнее @Value для группы настроек?

MiddleApplicationContext и конфигурацияSpring Boot
Ещё спрашивают так:
  • Как типобезопасно читать настройки в Spring Boot?
Коротко

@ConfigurationProperties связывает целый префикс настроек с типизированным объектом: вложенные структуры, списки, Duration и DataSize, валидация при старте, подсказки в IDE. @Value — для одиночных значений.

  • Record или неизменяемый класс — привязка через конструктор
  • @Validated + аннотации Bean Validation: неверная настройка роняет старт, а не прод ночью
  • Включение: @ConfigurationPropertiesScan или @EnableConfigurationProperties

А ещё spring-boot-configuration-processor генерирует метаданные для автодополнения

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

@Value удобен для одного значения, но с группой настроек неудобен: строки-ключи разбросаны по коду, нет вложенности, ошибки типа видны поздно.

@ConfigurationProperties:

@Validated
@ConfigurationProperties(prefix = "payments")
public record PaymentsProperties(
    @NotNull URI baseUrl,
    @DefaultValue("5s") Duration timeout,
    @Min(1) int retries,
    Map<String, String> headers) {}
payments:
  base-url: https://api.pay.ru
  timeout: 3s
  retries: 2

Плюсы: один объект на группу настроек, внедряется как бин; типы Duration, DataSize, перечисления, списки, карты; валидация при старте контекста; relaxed binding; метаданные для автодополнения в IDE.

Регистрация: @ConfigurationPropertiesScan на главном классе или @EnableConfigurationProperties(PaymentsProperties.class).

Что хотят услышать

  • Связывание префикса с объектом.
  • Типы, вложенность, валидация при старте.
  • Когда достаточно @Value.

Частые ошибки

  • Разбрасывать десятки @Value с одинаковым префиксом по коду.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Работает быстрее в рантайме
  • ✓Привязывает целую группу свойств к типобезопасному объекту с поддержкой валидации
  • ✗Не требует геттеров и сеттеров
  • ✗Единственный способ читать application.yml

Что спросят дальше

  • Как включить валидацию свойств?
  • Что такое relaxed binding?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем