添加用户定义的消息转换器后无法自动连接处理器

sgtfey8w  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(648)

在finchley.sr2上,下面是代码

@Configuration
@EnableAutoConfiguration
@SpringBootApplication
@EnableBinding(Processor.class)
@RestController
public class Application {
    private static Logger log = LoggerFactory.getLogger(Application.class);

    @Autowired
    private Processor processor;

    @Autowired
    MappingJackson2MessageConverter testConverter;

    @Bean
    @StreamMessageConverter
    MappingJackson2MessageConverter createTestConverter(){
        return new MappingJackson2MessageConverter();
    }

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

当我开始的时候 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.stream.messaging.Processor' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 但是如果我取出@streammessageconverter,处理器就可以自动连接成功。
我应该怎么做才能同时保持我的自定义消息转换器和自动连线处理器?谢谢!

lawou6xi

lawou6xi1#

有很多事情要做,所以让我们试着分析一下。
第一个问题,为什么需要自动连线以下内容?

@Autowired
private Processor processor;

一般来说,你不需要和 Processor 直接因为它被用于框架中,在绑定器公开的远程目的地和消息处理程序之间提供委托/连接模型,您的实际问题与生命周期有关,它可能是我们这边的一个小而无害的bug,可能与在同一配置类中配置和自动连接处理器有关。
第二:

@Configuration
 @EnableAutoConfiguration
 @SpringBootApplication

你只需要一个

@SpringBootApplication

第三:
为什么需要配置 MappingJackson2MessageConverter ? 内容类型转换是框架的一个透明特性,虽然我们提供了配置自定义消息转换器的功能,但您正在配置的一个已由框架配置,实际上是七个预配置消息转换器堆栈中的第一个
最后一个问题:
你想做什么?你能解释一下你的用例吗?

相关问题