spring - 执行 spring web 客户端导致 DeferringLoadBalancerExchangeFilterFunction 非限定 bean 异常

标签 spring spring-boot spring-cloud spring-webflux spring-cloud-feign

我已经使用 Spring WebFlux 创建了 spring boot 项目。想法是学习 Spring WebClient 和相关的东西。在应用程序开始时,出现以下错误

Error creating bean with name 'loadBalancerWebClientBuilderBeanPostProcessor' defined in class path resource [org/springframework/cloud/client/loadbalancer/reactive/LoadBalancerBeanPostProcessorAutoConfiguration.class]: 
Unsatisfied dependency expressed through method 'loadBalancerWebClientBuilderBeanPostProcessor' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 'org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction<?>' available: expected at least 1 bean which qualifies as autowire candidate. 
Dependency annotations: {}
 

我的 Maven 依赖项中有像 spring-cloud-dependencies/spring-boot-starter*/spring-cloud-context 这样的依赖项。错误只是给出 DeferrringLoadBalancerExchangeFilterFunction 不可用的信息,我试图在我的配置类中使用 @Bean 注入(inject)它。但错误仍然存​​在。请指教

在pom.xml中发布依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR9</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

 <dependencies>

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-all</artifactId>
    </dependency>
  

    <!-- 3rd Party Dependencies -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
  
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
        <version>2.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-context</artifactId>
        <version>2.2.5.RELEASE</version>
    </dependency>

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

    <!--Dependency for registering your app as a Spring Boot Admin Client-->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-dependencies</artifactId>
        <version>2.2.2</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
    </dependency>    

    <!--spring dependencies-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>
   
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-jwt</artifactId>
        <version>1.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    <!--swagger dependency-->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.4.4</version>
    </dependency>

    <!--3rd party dependencies-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>jwks-rsa</artifactId>
        <version>0.14.0</version>
    </dependency>

    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-gson</artifactId>
        <version>9.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.6</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.6</version>
    </dependency>

    <dependency>
        <groupId>com.nimbusds</groupId>
        <artifactId>nimbus-jose-jwt</artifactId>
    </dependency>

请注意,我在我的代码中使用了 feign 客户端和 web 客户端。不确定是否有影响

最佳答案

看起来我遇到了具有类似根本原因的问题。 要将 Spring Cloud 与 Spring Boot 一起使用,您必须遵守 versions compatibility . 我有一个基于 Spring Boot (2.3.12.RELEASE) 和 Spring Cloud (Hoxton.SR11) 的项目,这很好。 但我也尝试使用最新版本的 com.playtika.reactivefeign:feign-reactive:3.0.3,它实际上依赖于 Spring Cloud (2020.0.x)

结果我遇到了同样的错误

Error creating bean with name 'loadBalancerWebClientBuilderBeanPostProcessor'`

在我的例子中,我已经将 reactivefeign 版本降级到 2.0.31

关于spring - 执行 spring web 客户端导致 DeferringLoadBalancerExchangeFilterFunction 非限定 bean 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65884627/

相关文章:

java - 在 Spring XML 中配置 WebBindingInitializer

java - 使用私有(private)字段和@PostConstruct对Spring boot服务进行单元测试

java - Spring Cloud Gateway 返回空响应

java - 如何在Spring boot中排除一些@Configuration并仅使用@Import导入它们

java - 无法从Spring Cloud配置服务器接收值

Spring Discovery First Bootstrap 找不到 ConfigServer

spring-cloud - 发现客户端的后备 Eureka 服务器配置?

java - 如何在Spring上下文中注入(inject)回调类?

java - 授权后不显示登录信息

java - 与 JPA OneToMany 映射的只读关联