@ConditionalOnProperty без matchIfMissing — бин исчезает молча
Аннотация создаёт бин только если указанное свойство есть в конфиге и равно true (или заданному значению). Параметр matchIfMissing по умолчанию false — если свойства нет вообще, условие считается невыполненным.
В коде это выглядит нейтрально: параметр просто не указан, значит «поведение по умолчанию». Проблема в том, что при рефакторинге конфигов свойство можно случайно потерять — и приложение продолжит стартовать без единой ошибки, просто без части функциональности.
@ConditionalOnProperty( name = "feature.export.enabled" ) @Bean public ExportService exportService() { return new ExportServiceImpl(); }
На проде свойство убрали при переносе конфигов в новый формат — бин тихо исчез, приложение поднялось, functionality пропала без ошибок в логах старта. Спросят, чем это отличается от @ConditionalOnMissingBean — тот проверяет наличие бина в контексте, а не значение property.
matchIfMissing стоит указывать явно, даже когда default подходит — чтобы намерение было видно в коде, а не в документации Spring.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки