Вопрос был сильно отредактирован во время обсуждения с Олегом
Я пытаюсь реализовать механизм связывания для BigQuery в Spring Cloud Stream.
Полный код приложения доступенна GitHub .
Пока что я написал класс BigQueryBinderConfiguration
, который возвращает BigQueryBinder
следующим образом
@Configuration @EnableConfigurationProperties({ BigQueryConfiguration.class })
public class BigQueryBinderConfiguration {
@Autowired BigQueryConfiguration configuration;
@Bean
BigQueryBinder bigQueryMessageChannelBinder(BigQueryConfiguration configuration, BigQueryProvisioningProvider provisioningProvider) {
return new BigQueryBinder(configuration, provisioningProvider);
}
@Bean BigQueryProvisioningProvider provisioningProvider() {
return new BigQueryProvisioningProvider(configuration);
}
}
Моя проблема в том, что когдапри этом другие мои связующие (Кролик и Кафка) больше не узнаются.
Мой протокол тестирования выглядит следующим образом: я запускаю свое приложение и проверяю в интерфейсе администратора rabbitmq, регистрируется ли мое приложение как потребитель.Это не тот случай, когда этот код не комментируется.
При отладке вызова bigQueryMessageChannelBinder(....)
я наблюдаю следующие вещи:
Метод DefaultBinderFactory#getBinder(...)
всегда возвращает мой экземпляр BigQueryBinder.Отладка показывает, что вызов this.context.getBeansOfType(Binder.class);
возвращает список, который содержит только мой BigQueryBinder.Я озадачен, потому что другие связующие находятся в моем classpath, и если я удаляю фабричный метод BigQueryBinderConfiguration#bigQueryMessageChannelBinder(....)
, все работает нормально.
Я обнаружил во время отладки, что DefaultBinderFactory
является классом, который являетсяиспользуется для привязки связывателя к имени конфигурации.Я также обнаружил, что реализации Binder не должны появляться в Map<String, Binder> binders
.Но, к сожалению, моя реализация Binder появляется в этом списке.Я думаю, это как-то связано с природой бобов.Но как?