在 Spring 上下文中找不到 StreamBridge bean

问题描述 投票:0回答:2

StreamBridge 无法注入(使用

@Autowired
)到服务中并导致以下错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.stream.function.StreamBridge' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

pom.xml
(部分)

<repositories>
    <repository>
        <id>confluent</id>
        <url>https://packages.confluent.io/maven/</url>
    </repository>
</repositories>

<properties>
    <!-- Build properties -->
    <maven.version>3.2.5</maven.version>
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <start-class>com.smarthome.actuatorms.ActuatormsApp</start-class>
    <argLine>-Djava.security.egd=file:/dev/./urandom -Xmx1G</argLine>
    <m2e.apt.activation>jdt_apt</m2e.apt.activation>
    <run.addResources>false</run.addResources>
    <jhipster-dependencies.version>7.9.3</jhipster-dependencies.version>
    <spring-boot.version>3.0.2</spring-boot.version>
    <archunit-junit5.version>0.22.0</archunit-junit5.version>
    <mapstruct.version>1.5.2.Final</mapstruct.version>
    <!-- Plugin versions -->
    <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
    <maven-site-plugin.version>3.12.1</maven-site-plugin.version>
    <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
    <maven-javadoc-plugin.version>3.4.1</maven-javadoc-plugin.version>
    <maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
    <maven-enforcer-plugin.version>3.1.0</maven-enforcer-plugin.version>
    <maven-failsafe-plugin.version>3.0.0-M7</maven-failsafe-plugin.version>
    <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
    <maven-idea-plugin.version>2.2.1</maven-idea-plugin.version>
    <maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
    <maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
    <maven-war-plugin.version>3.3.2</maven-war-plugin.version>
    <maven-checkstyle-plugin.version>3.1.2</maven-checkstyle-plugin.version>
    <checkstyle.version>10.3.2</checkstyle.version>
    <nohttp-checkstyle.version>0.0.10</nohttp-checkstyle.version>
    <git-commit-id-plugin.version>5.0.0</git-commit-id-plugin.version>
    <modernizer-maven-plugin.version>2.4.0</modernizer-maven-plugin.version>
    <jacoco-maven-plugin.version>0.8.8</jacoco-maven-plugin.version>
    <properties-maven-plugin.version>1.1.0</properties-maven-plugin.version>
    <sonar-maven-plugin.version>3.9.1.2184</sonar-maven-plugin.version>

    <avro.version>1.11.1</avro.version>
    <avro-compiler.version>1.11.1</avro-compiler.version>
    <avro-maven-plugin.version>1.11.1</avro-maven-plugin.version>
    <kafka-avro-serializer.version>7.3.1</kafka-avro-serializer.version>
    <spring-cloud-stream-schema.version>2.2.1.RELEASE</spring-cloud-stream-schema.version>
    <spring-cloud-stream.version>4.0.1</spring-cloud-stream.version>

    <spring-boot-starter-validation.version>3.0.2</spring-boot-starter-validation.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>tech.jhipster</groupId>
            <artifactId>jhipster-dependencies</artifactId>
            <version>${jhipster-dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>${spring-boot-starter-validation.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-kafka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream</artifactId>
        <version>${spring-cloud-stream.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-binder-kafka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-schema</artifactId>
        <version>${spring-cloud-stream-schema.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>${avro.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro-compiler</artifactId>
        <version>${avro-compiler.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro-maven-plugin</artifactId>
        <version>${avro-maven-plugin.version}</version>
    </dependency>
    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-avro-serializer</artifactId>
        <version>${kafka-avro-serializer.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Spring Cloud -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.retry</groupId>
        <artifactId>spring-retry</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

请注意,这些依赖项并不详尽,我已经包含了与 Spring Cloud Stream 最相关的依赖项。 在

application.yml
属性中,我包含了 Spring Cloud 流的属性。

spring:
  cloud:
    stream:
      kafka:          
        binder:
          brokers:
            - localhost:9092
          producer-properties:
            key.serializer: io.confluent.kafka.serializers.KafkaAvroSerializer
            value.serializer: io.confluent.kafka.serializers.KafkaAvroSerializer
            schema.registry.url: http://localhost:8081 
          consumer-properties:
            key.deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
            value.deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
            schema.registry.url: http://localhost:8081
            specific.avro.reader: true
      bindings:
        switchArrayStateProducer-out-0:
          destination: switch_array_state
          content-type: application/*+avro
          group: switch-array-state-group-0

我在这个项目中使用了 Avro,并在 Kafka 中创建了一个名为

switch_array_state
的主题。

有一个服务,我正在注入

StreamBridge
(我尝试了构造函数注入和自动装配)。但这就是发现依赖性问题的地方。似乎没有这种类型的 bean,我不知道为什么没有实例化它。我之前曾在具有不同 Spring Boot 版本的不同应用程序上使用过这种方法,并且它有效。

spring-boot spring-cloud-stream spring-cloud-stream-binder-kafka
2个回答
0
投票

我找到了原因。这是 Spring Cloud 和 Spring Boot 版本不匹配。

查看此链接了解更多信息


0
投票

有任何更新吗?我们在这里遇到同样的问题:(

© www.soinside.com 2019 - 2024. All rights reserved.