Как сделать конфигурацию условной для другой конфигурации?
Я хочу сделать мой класс конфигурации весенней загрузки A
зависит от другого класса конфигурации B
т.е. A
конфигурация оценивается только если B
Конфигурация оценивается.
В реальном контексте у меня есть сотни Ai
конфигурации и только одна B
и я хочу реализовать способ исключить все Ai
конфиги исключая только B
во время испытаний.
Я попробовал следующее:
@Configuration
@ConditionalOnBean(type = "org.my.B")
public class A1AutoConfiguration {
// ...
}
куда B
это безусловный класс конфигурации.
Но когда я бегу mvn spring-boot:run -Ddebug=true
я вижу это A
никогда не оценивается, потому что B
пропал, отсутствует. В то время как бобы созданы внутри B
находятся в контексте приложения, B
само по себе нет.
Я хотя я могу сделать Ai
классы конфигурации зависят от bean-компонентов, созданных внутри B
но мне не очень нравится это решение.
Есть ли более чистый (и работающий) способ реализации такого механизма зависимости?
2 ответа
Ключ должен убедиться, что все упорядочено правильно. Нет смысла просить А подать заявление, только если присутствует Б, если вы не можете убедиться, что Б оценивается первым.
Сотня часть меня немного пугает. Если As и B являются автоконфигурацией, вы можете использовать следующее
@AutoconfigureAfter(B.class)
@ConditionalOnBean(B.class)
public class A123AutoConfiguration { ...}
Если As и B не являются автоконфигурациями, вам необходимо убедиться, что B обрабатывается первым, чтобы вы не могли полагаться на обычное сканирование пути к классам.
Я бы сказал, что такая группа бинов подходит для отдельной библиотеки или подмодуля, поэтому они независимы. В том числе механизмом может быть компонентное сканирование корневого пакета такой библиотеки или субмодуля.
Другой вариант - использовать пружинные профили. Пометьте свои бобы @Profile
аннотация и использование @ActiveProfiles
включить определенную группу бинов во время теста.