最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

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

业界 admin 2浏览 0评论
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.nmon.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]

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,而不是配置类本身。

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

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.nmon.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]

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,而不是配置类本身。

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

发布评论

评论列表 (0)

  1. 暂无评论