它是一个早期运行的spring boot 2.0.0应用程序,但是在我添加了spring-cloud-stream的依赖项之后,这个错误就开始了 . 我尝试删除了spring-fox依赖项,但它只删除了嵌套异常 .

删除spring-fox依赖后的完整错误:

ConfigServletWebServerApplicationContext:在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:在类路径资源中定义名称为'requestMappingHandlerMapping'的bean时出错[org / springframework / boot / autoconfigure / web / servlet / WebMvcAutoConfiguration $ EnableWebMvcConfiguration.class]:调用init方法失败;嵌套异常是java.lang.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExceptionProxy

完整的pom.xml是:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.foo.bar.application</groupId>
<artifactId>application-reviews-manager</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>generic-name</name>
<description>Manager</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
       <application.utils.version>1.0.0</application.utils.version>
       <application.utils.build.number>SNAPSHOT</application.utils.build.number>
       <application.rnr.repositories.version>1.0.0</application.rnr.repositories.version>
       <application.rnr.repositories.build.number>SNAPSHOT</application.rnr.repositories.build.number>
       <dcp.config.version>0.0.1</dcp.config.version>
    <dcp.config.build.number>SNAPSHOT</dcp.config.build.number>
    <aspectj.version>1.8.9</aspectj.version>
</properties>

<dependencies>

    <dependency>
        <groupId>com.foo.bar.application</groupId> 
        <artifactId>application-rnr-repositories</artifactId>
        <version>${application.rnr.repositories.version}-${application.rnr.repositories.build.number}</version>
    </dependency>

    <dependency>
        <groupId>com.foo.bar.application</groupId> 
        <artifactId>application-utils</artifactId>
        <version>${application.utils.version}-${application.utils.build.number}</version>
    </dependency>

    <dependency>
        <groupId>com.foo.dcp.commons.config</groupId>
        <artifactId>dcp-config-client</artifactId>
        <version>${dcp.config.version}-${dcp.config.build.number}</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>5.6.3</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>5.6.3</version>
    </dependency>

    <dependency>
        <groupId>com.github.tomakehurst</groupId>
        <artifactId>wiremock</artifactId>
        <version>1.58</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
          <groupId>org.elasticsearch.test</groupId>
          <artifactId>framework</artifactId>
          <version>5.0.0</version>
          <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        <version>1.3.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream</artifactId>
        <version>1.3.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

我只是 Spring 天 Cloud 流的首发,所以任何帮助都会受到赞赏 .

编辑:

我们发现错误在于使用注释@EnableBinding的方式或位置 .

相关的代码片段是:

Application.java

package com.foo.bar;

import com.foo.bar.configuration.FooStreams;
import com.foo.bar.configuration.BarStreams;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.context.annotation.Bean;

import com.externalpackage.config.client.AppConfiguration;
import com.foo.bar.storage.repository.CustomElasticRestClient;

@SpringBootApplication
@EnableBinding({FooStreams.class, BarStreams.class})
public class FooApplication {

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


    @Bean
    public AppConfiguration appConfiguration() {
        return AppConfiguration.instance();
    }

    @Bean
    public CustomElasticRestClient highLevelElasticClient(AppConfiguration appConfiguration) throws Exception {
        return new CustomElasticRestClient(appConfiguration);
    }
}

FooStreams.java

package com.foo.bar.configuration;

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;

public interface FooStreams {

    String OUTPUT = "foo-out";

    @Output(value = OUTPUT)
    MessageChannel postFooToOutChanel();

}

BarStreams.java

package com.tesco.foo.bar.configuration;

import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;

public interface BarStreams {

    String OUTPUT = "bar-out";

    @Output(value = OUTPUT)
    MessageChannel postBarToOutChanel();
}

KafkaPublisherService.java:

package com.foo.bar.service;

import com.foo.bar.configuration.FooStreams;
import com.foo.bar.configuration.BarStreams;
import com.foo.bar.domain.Foo;
import com.foo.bar.domain.Bar;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
import org.springframework.util.MimeTypeUtils;

@Service
@Slf4j
public class KafkaPublisherService {

    @Autowired
    private BarStreams barStreams;

    @Autowired
    private FooStreams fooStreams;

    public void sendBar(final Bar bar) {
        log.info("Publishing bar to kafka {}", bar);

        MessageChannel messageChannel = barStreams.postBarToOutChanel();
        messageChannel.send(MessageBuilder
                .withPayload(bar)
                .setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)
                .build());
    }

    public void sendFoo(final Foo foo) {
        log.info("Publishing foo to kafka {}", foo);

        MessageChannel messageChannel = fooStreams.postFooToOutChanel();
        messageChannel.send(MessageBuilder
                .withPayload(foo)
                .setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)
                .build());
    }
}

application.properties

spring.cloud.stream.kafka.binder.brokers=localhost:9092
spring.cloud.stream.bindings.foo-out.destination=feedback 
spring.cloud.stream.bindings.foo-out.contentType=application/json
spring.cloud.stream.bindings.bar-out.destination=review
spring.cloud.stream.bindings.bar-out.contentType=application/json