【问题标题】:Why can't Spring autowire my cloud stream Processor?为什么 Spring 不能自动装配我的云流处理器?
【发布时间】:2018-12-17 15:19:03
【问题描述】:

我正在尝试从 spring-cloud-stream 实现一个基本处理器。我以前在其他项目上做过这个,所以我以为我很熟悉它。但是这次 Spring 在通过 @Autowire 创建 @Service 组件中的我的处理器引用时遇到了问题。

我认为重要的部分是应用程序上的@EnableBinding(my.class),但我有。

错误是

No qualifying bean of type 'com.mycompany.config.BizSyncProcessor' available

我还尝试将@Component 添加到BizSyncProcessor,但这没有任何区别。

以下是碎片:

public interface BizSyncProcessor {

    String BUSINESS_IDS_INPUT = "updatedBusinessIdsIn";
    String BUSINESS_IDS_OUTPUT = "updatedBusinessIdsOut";

    @Output(BizSyncProcessor.BUSINESS_IDS_OUTPUT)
    MessageChannel writeUpdatedBusinessIds();

    @Input(BizSyncProcessor.BUSINESS_IDS_INPUT)
    MessageChannel readUpdatedBusinessIds();

}

@Service
public class BusinessService {

    @Autowired
    private BizSyncProcessor bizSyncProcessor;

    // methods which reference bizSyncProcessor's input and outputs
}

@EnableBinding(BizSyncProcessor.class)
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

【问题讨论】:

  • 听起来你的类路径中没有任何活页夹实现!
  • 看起来就是这样!谢谢!至少,克服了启动错误。我添加了 spring-cloud-stream-binder-rabbit 依赖项并清除了此错误。仍然不确定我是否真的在给它写信,但这是一个单独的问题。把它写成答案,我会把它标记为答案。另外,文档中是否提到了您需要在类路径上实现活页夹的任何地方?

标签: spring spring-cloud-stream


【解决方案1】:

如果没有应用程序类路径中提供的一些 Binder 实现,@EnableBinding(BizSyncProcessor.class) 没有任何意义。正是该工具执行实际绑定并为我们提供特定的 bean 以进行依赖注入。

是的...看起来文档中没有明确的句子必须存在Binder实现才能触发绑定接口代理并将其注册为bean:http://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.0.RC3/single/spring-cloud-stream.html#_destination_binders

随时提出 GitHub 问题来询问这样的文档改进!

【讨论】:

  • 我现在的测试也遇到了同样的问题。我正在使用 mockito,所以我的测试有 @RunWith(MockitoJUnitRunner.class) 而不是 @RunWith(SpringRunner.class),spring-cloud-stream 测试文档显示。我正在使用 Maven,并且包含了兔子工件,但我注意到依赖项没有范围。会不会是这个问题?
  • 听起来像是一个单独的 SO 线程,我觉得还有更多不相关的细节
猜你喜欢
  • 2012-06-11
  • 2015-11-14
  • 2012-04-30
  • 2015-09-18
  • 2012-02-14
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
相关资源
最近更新 更多