Используйте только локальные bean-компоненты внутри подмодуля в многомодульном проекте spring-boot - PullRequest
0 голосов
/ 20 апреля 2019

Я создаю приложение Spring boot с двумя подмодулями: sumboduleEmail и submoduleSms. У каждого подмодуля есть @Configuration файл, который создает бины.

-root
  - SpringBootApplicationClass
  | - submoduleEmail
  | -   QueueEmail.java
  | -   ExchangeEmail.java
  | -   Config.java

  | - submoduleTwo
  | -   QueueSms.java
  | -   ExchangeSms.java
  | -   Config.java

В каждом конфигурационном файле:

@Bean("emailQueue") or ("smsQueue")
public Queue queue() {
    return new Queue(configProperties.getQueue());
}

@Bean("emailExchange") or ("smsExchange")
public DirectExchange exchange() {
    return new DirectExchange(configProperties.getExchange());
}

@Bean("emailBinding") or ("smsBinding")
public Binding binding() {
    return BindingBuilder
            .bind(queue())
            .to(exchange())
            .with(configProperties.getRoutingKey());
}

В связи с тем, что Spring запускается из корня проекта, он видит все bean-компоненты из всех подмодулей.

Я пытаюсь связать свой локальный Exchange боб с локальным Queue бином внутри локального Email-подмодуля.

Если не использовать Qualifier -аннотации, я ожидаю связывания только локальных bean-компонентов из локального подмодуля. Но Spring-boot имеет bean-компоненты из собственного глобального контекста с другими bemo-компонентами и связывают неправильные bean-компоненты. Из-за этого я получаю неправильную привязку.

Первое решение этой проблемы - используйте аннотацию Qualifier, как в примере.

Но как сказать Spring boot, что он должен использовать только локальные компоненты в локальном подмодуле, не используя Qualifier -аннотации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...