首页 > 其他分享 >Consider defining a bean of type ‘org.springframework.cloud.client.loadbalancer.reactive.LoadBalance

Consider defining a bean of type ‘org.springframework.cloud.client.loadbalancer.reactive.LoadBalance

时间:2024-08-11 20:52:57浏览次数:9  
标签:负载 Consider LoadBalance springframework LoadBalancerBeanPostProcessorAutoConfigu

1、bug报错

问题:项目启动失败

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in com.tianji.learning.controller.InteractionQuestionAdminController required a bean of type 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' in your configuration.

09:24:18.140-[DESKTOP-1G6DPV3][sys] - WARN 22536 --- [       Thread-1] c.a.n.common.http.HttpClientBeanHolder   : [HttpClientBeanHolder] Start destroying common HttpClient

查看日志

09:24:18.106-[DESKTOP-1G6DPV3][sys] - WARN 22536 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception thrown from ApplicationListener handling ContextClosedEvent
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'rabbitConnectionFactory': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220) ~[spring-beans-5.3.22.jar:5.3.22]

image-20240811093442742

2、bug解决

一开始我以为是依赖导入错误,没有添加负载均衡的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

但是,添加完依赖后,重启还是一样的

再次查看日志发现

Parameter 1 of constructor in com.tianji.learning.controller.InteractionQuestionAdminController required a bean of type 'org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration' that could not be found.

这个错误表明应用程序启动失败,主要原因是 InteractionQuestionAdminController 的构造函数需要一个 LoadBalancerBeanPostProcessorAutoConfiguration 类型的 bean,但是系统中找不到这个 bean。

查看InteractionQuestionAdminController方法

@RestController
@Api(tags = "问题相关接口-管理端")
@RequestMapping("/admin/questions")
@Slf4j
@RequiredArgsConstructor
public class InteractionQuestionAdminController {

    private final IInteractionQuestionService questionService;
    private final LoadBalancerBeanPostProcessorAutoConfiguration loadBalancerBeanPostProcessorAutoConfiguration;

    @GetMapping("/page")
    @ApiOperation("管理端分页查询问题")
    public PageDTO<QuestionAdminVO> queryQuestionPageAdmin(QuestionAdminPageQuery query){
        log.info("管理端分页查询问题:{}",query);
        return questionService.queryQuestionPageAdmin(query);
    }

}

发现不知道什么时候idea自己帮我注入了

private final LoadBalancerBeanPostProcessorAutoConfiguration loadBalancerBeanPostProcessorAutoConfiguration;

这行代码实际上是一个错误的依赖注入。LoadBalancerBeanPostProcessorAutoConfiguration 是 Spring Cloud 负载均衡器的一个自动配置类,它不应该被直接注入到控制器或其他业务组件中。

  1. LoadBalancerBeanPostProcessorAutoConfiguration 的作用:
    • 这是一个自动配置类,用于设置负载均衡器相关的 Bean 后处理器。
    • 它是 Spring Cloud 负载均衡功能的一部分,用于自动配置和设置负载均衡的相关组件。
    • 这个类通常由 Spring 框架自动处理,不需要开发者直接使用或注入。
  2. 为什么不应该在控制器中注入:
    • 自动配置类是用来配置 Spring 应用上下文的,不是设计用来在业务代码中直接使用的。
    • 直接注入这个类不会提供任何有用的功能,反而可能导致意外的行为或错误。
    • 它违反了关注点分离的原则,将基础设施的配置逻辑混入了业务逻辑中。
  3. 正确的使用方式:
    • 通常,你只需要在项目中添加正确的 Spring Cloud 依赖,框架就会自动处理负载均衡的配置。
    • 如果需要使用负载均衡功能,你应该注入和使用 LoadBalancerClient@LoadBalanced RestTemplate,而不是配置类本身。

将它删除后,项目成功启动

image-20240811093752956

标签:负载,Consider,LoadBalance,springframework,LoadBalancerBeanPostProcessorAutoConfigu
From: https://blog.csdn.net/weixin_53961667/article/details/141101538

相关文章

  • 1251 - Client does not support authentication protocol requested by server; cons
    错误记录:1251-Clientdoesnotsupportauthenticationprotocolrequestedbyserver;considerupgradingMySQLclient错误原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。解决方案:解决:①升级navicat驱动;②......
  • day03-loadbalancer
    1概述LoadBalancer:被包含于springcloudcommons下用来替换以前的ribbon组件,一个客户端负载均衡器。不仅支持RestTemplate,还支持WebClient(SpringWebFlux中提供的功能,可以实现响应式异步请求)。客户端负载均衡和服务端负载均衡有什么区别服务端负载均衡:负载均衡在服务器上......
  • This function or variable may be unsafe. Consider using scanf_s instead报错-快速
    文章目录问题描述:问题解决:1、安装软件2、更改newc++file.cpp文件3、新建项目验证问题描述:vs2019运行含有scanf函数的代码时,实例代码如下:会出现如下图所示报错:#问题剖析:首先说结论,因为scanf是标准C提供的函数,但是vs2019无法识别导致报错,从报错的的代码可以......
  • Could not recover RibbonLoadBalancerClient.choose ServiceInstance
    org.springframework.retry.TryException:Couldnotrecover;nestedexceptionisjava.lang.AbstractMethodError:org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;......
  • SpringCloud 负载均衡 spring-cloud-starter-loadbalancer
    简述spring-cloud-starter-loadbalancer是SpringCloud中的一个组件,它提供了客户端负载均衡的功能。在SpringCloud的早期版本中,NetflixRibbon被广泛用作客户端负载均衡器,但随着时间推移和NetflixRibbon进入维护模式,SpringCloud社区开始转向更灵活、更易于维护......
  • Spring Cloud LoadBalancer
    SpringCloudAlibabaSpringCloudLoadBalancer具体介绍转载:SpringCloudLoadBalancer负载均衡策略与缓存机制-CSDN博客1.依赖因为Ribbon作为早期的客户端负载均衡工具,在SpringCloud2020.0.0版本之后已经被移除了,取而代之的是SpringCloudLoadBalancer,而且Ribbon......
  • 'scanf': This function or variable may be unsafe. Consider using scanf_s instead
    在C++中使用scanf时应注意两点1.导入#include<cstdio>2.将scanf改成scanf_s  VS2022实现查找替换编辑——》查找和替换——》在文件中替换 输入要查找替换的名称 点击全部替换完成......
  • Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐
    1 metallb安装参考:Kubernetes(k8s)v1.30.1本地集群部署默认不支持LoadBalancermetallb来解决-CSDN博客2 删除Layer2模式配置kubectldelete-fIPAddressPool.yamlkubectldelete-fL2Advertisement.yamlkubectldelete-fdiscuz-srv.yaml3配置k8sMeta......
  • dubbo-AdaptiveLoadBalance
    AdaptiveLoadBalance使用AdaptiveLoadBalanceFilter初始化的数据。核心处理org.apache.dubbo.rpc.cluster.loadbalance.AdaptiveLoadBalance#selectByP2Corg.apache.dubbo.rpc.cluster.loadbalance.AdaptiveLoadBalance#chooseLowLoadInvokerorg.apache.dubbo.rpc.AdaptiveMet......
  • dubbo-AdaptiveLoadBalanceFilter
    消费者端使用自适应负载方式dubbo负载方式介绍随机、循环负载平衡、最少活动、参数的一致性哈希、成功调用响应时间最短、自适应负载平衡AdaptiveLoadBalanceFilter内部使用ThreadPoolExecutor线程池处理,核心、最大线程数据为1,队列为1024个初始化ThreadPoolExecutor方式为双......