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]
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 负载均衡器的一个自动配置类,它不应该被直接注入到控制器或其他业务组件中。
LoadBalancerBeanPostProcessorAutoConfiguration
的作用:- 这是一个自动配置类,用于设置负载均衡器相关的 Bean 后处理器。
- 它是 Spring Cloud 负载均衡功能的一部分,用于自动配置和设置负载均衡的相关组件。
- 这个类通常由 Spring 框架自动处理,不需要开发者直接使用或注入。
- 为什么不应该在控制器中注入:
- 自动配置类是用来配置 Spring 应用上下文的,不是设计用来在业务代码中直接使用的。
- 直接注入这个类不会提供任何有用的功能,反而可能导致意外的行为或错误。
- 它违反了关注点分离的原则,将基础设施的配置逻辑混入了业务逻辑中。
- 正确的使用方式:
- 通常,你只需要在项目中添加正确的 Spring Cloud 依赖,框架就会自动处理负载均衡的配置。
- 如果需要使用负载均衡功能,你应该注入和使用
LoadBalancerClient
或@LoadBalanced RestTemplate
,而不是配置类本身。
将它删除后,项目成功启动
标签:负载,Consider,LoadBalance,springframework,LoadBalancerBeanPostProcessorAutoConfigu From: https://blog.csdn.net/weixin_53961667/article/details/141101538