springcloud-config客户端启用服务发现报错找不到bean EurekaHttpClient

背景

在对已有项目进行改造的时候,集成SpringConfigStarter,编写完bootstrap.yml,在idea 启动项中编辑并新增VM options -Dspring.cloud.config.discovery.enabled=true,该版本不加spring不会从configService获取信息,官方建议引入一个starter,但是在我的项目中并没有用处,点击运行,报错信息如下

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.netflix.discovery.shared.transport.EurekaHttpClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]... 30 common frames omitted

根据堆栈信息缺失EurekaHttpClient,很容易联想到是不是依赖问题,确认了pom.xml之后发现确实引入了

       <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>

环境如下
SpringBoot 版本2.3.12.Release
SpringCloud 版本 Hoxton.SR12
JDK 11

再次运行依然报错,然后根据报错堆栈找到,创建的beans
org.springframework.cloud.netflix.eureka.config.EurekaConfigServerBootstrapConfiguration#eurekaConfigServerInstanceProvider该bean的第一个参数就是EurekaHttpClient,也就是创建该bean的时候EurekaHttpClient并没有完成初始化,同时注意到该Configuration的是有初始化EurekaHttpClient的逻辑的

@Bean@ConditionalOnMissingBean(value = {EurekaClientConfig.class},search = SearchStrategy.CURRENT)public EurekaClientConfigBean eurekaClientConfigBean() {return new EurekaClientConfigBean();}@Bean@ConditionalOnMissingBean({EurekaHttpClient.class})@ConditionalOnProperty(prefix = "eureka.client",name = {"webclient.enabled"},matchIfMissing = true,havingValue = "false")public RestTemplateEurekaHttpClient configDiscoveryRestTemplateEurekaHttpClient(EurekaClientConfigBean config, Environment env) {return (RestTemplateEurekaHttpClient)(new RestTemplateTransportClientFactory()).newClient(new DefaultEndpoint(getEurekaUrl(config, env)));}...@Beanpublic ConfigServerInstanceProvider.Function eurekaConfigServerInstanceProvider(EurekaHttpClient client, EurekaClientConfig config) {return (serviceId) -> {if (log.isDebugEnabled()) {log.debug("eurekaConfigServerInstanceProvider finding instances for " + serviceId);}EurekaHttpResponse<Applications> response = client.getApplications(new String[]{config.getRegion()});List<ServiceInstance> instances = new ArrayList();if (this.isSuccessful(response) && response.getEntity() != null) {Applications applications = (Applications)response.getEntity();applications.shuffleInstances(config.shouldFilterOnlyUpInstances());List<InstanceInfo> infos = applications.getInstancesByVirtualHostName(serviceId);Iterator var8 = infos.iterator();while(var8.hasNext()) {InstanceInfo info = (InstanceInfo)var8.next();instances.add(new EurekaServiceInstance(info));}if (log.isDebugEnabled()) {log.debug("eurekaConfigServerInstanceProvider found " + infos.size() + " instance(s) for " + serviceId + ", " + instances);}return instances;} else {return instances;}};}

可以看到bean RestTemplateEurekaHttpClient 通过org.springframework.cloud.netflix.eureka.config.EurekaConfigServerBootstrapConfiguration#configDiscoveryRestTemplateEurekaHttpClient 方法进行初始化,但是该方法执行有两个条件,即eureka.client.webclient.enabled=false@ConditionalOnMissingBean({EurekaHttpClient.class})当前环境不存在EurekaHttpClient,可以确定的是我在bootstrap.yml 配置了 eureka.client.webclient.enabled=false 并检查了好几次,根据Spring容器的初始化规则按照同Configuration类 bean从上往下一次初始化的原则,容器并没有执行 RestTemplateEurekaHttpClient的初始化操作。E:/.m2/repository/org/springframework/cloud/spring-cloud-netflix-eureka-client/2.2.9.RELEASE/spring-cloud-netflix-eureka-client-2.2.9.RELEASE.jar!/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.class:66
在代码的这里断点端上,然后找一个可以拿到ApplicationContext的地方执行一下表达式
environment.getProperty("eureka.client.webclient.enabled") result为 true,为了避免EurekaHttpClient已存在导致的不执行,这里再验证一下是否存在这个bean

在这里插入图片描述
从结果来看,引起RestTemplateEurekaHttpClient初始化不执行的原因就是 eureka.client.webclient.enabled=false,然后再次返回检查了所有配置文件终于再bootstrap
.yml中的dev profile部分看到配置依然显示为true

spring:profiles:include:- defaultactive: dev
---
spring:profiles: defaultcloud:config:enabled: truediscovery:enabled: trueservice-id: YOUR_CONFIG-SERVICEprofile: ${spring.profiles.active}label: masterapplication:name: yourAppName
logging:file:path: ${spring.application.name}/logs/level:root: debug
eureka:instance:prefer-ip-address: true
---
spring:profiles: devsecurity:user:name: userpassword: 123456
eureka:client:webclient:enabled: truefetch-registry: trueservice-url:defaultZone: http://your_eureka_host/eurekainstance:metadata-map:user:name: ${spring.security.user.name}password: ${spring.security.user.password}

原因

因为本地bootstrap.yml 通过profiles 来区分不同的运行环境,导致我修改的一直修改的pro环境的配置,笑死。往往神奇的问题,都因为一些简单的原因导致的。记录排查过程,排解下郁闷☹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三、GPIO口

我们在刚接触C语言时&#xff0c;写的第一个程序必定是hello world&#xff0c;其他的编程语言也是这样类似的代码是告诉我们进入了编程的世界&#xff0c;在单片机中也不例外&#xff0c;不过我们的传统就是点亮第一个LED灯&#xff0c;点亮电阻&#xff0c;电容的兄弟&#x…

[CSS] 浮动布局的深入理解与应用

文章目录 浮动的简介元素浮动后的特点解决浮动产生的影响浮动后的影响解决浮动产生的影响 浮动相关属性实际应用示例示例1&#xff1a;图片与文字环绕示例2&#xff1a;多列布局示例3&#xff1a;响应式布局 总结 浮动布局是CSS中一种非常强大的布局方式&#xff0c;最初设计用…

java项目(knife4j使用,静态资源未放在static资源包下,公共字段自动填充,Spring Cache与Spring Task)

Knife4j&#xff08;生成接口文档&#xff09; 使用swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。官网:https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。…

JMeter请求导出Excel

前言 今天记录一个使用JMeter模拟浏览器请求后端导出&#xff0c;并下载Excel到指定位置的过程 创建请求 同样先创建一个线程组&#xff0c;再创建一个请求&#xff0c;设置好请求路径&#xff0c;端口号等 查看结果树 右键--添加--监听器--查看结果树 这里可以查看&#…

Windows搭建RTMP视频流服务器

参考了一篇文章&#xff0c;见文末。 博客中nginx下载地址失效&#xff0c;附上一个有效的地址&#xff1a; Index of /download/ 另外&#xff0c;在搭建过程中&#xff0c;遇到的问题总结如下&#xff1a; 1 两个压缩包下载解压并重命名后&#xff0c;需要 将nginx-rtmp…

【Linux】编辑器vscode与linux的联动

1.vscode简单学习 vscode是编辑器&#xff0c;可以写各种语言的程序 下载链接&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 来用一下vscode 我们保存了就能在我们的那个文件夹里面看到这个 这个就是编辑器&#xff0c;跟我们的文本文件好像差不多&#…

栈及栈的应用(有效的括号 力扣20)

栈的概念 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 画个图理解一下 咱们可以观…

在项目中加入 husky + lint-staged + eslint,代码检测格式化

背景 由于日常工作的多人协作中&#xff0c;会因为个人代码编写风格导致代码在不同人电脑上&#xff0c;会有异常代码格式的提示&#xff0c;为了解决这个小问题&#xff0c;我们可以使用 husky lint-staged 来对代码进行一定程度上的格式化&#xff0c;使格式风格统一&#x…

jenkins 使用教程

1. 安装最新长期稳定版 2.426.1 Redhat Jenkins Packages sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum insta…

ubuntu20.04支持win10远程桌面连接

1. 安装xrdp sudo apt install xrdp 2. 检查xrdp状态 sudo systemctl status xrdp 要处于running状态 3.&#xff08;若为Ubuntu 20&#xff09;添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4. 重启服务 sudo systemctl restart xrdp 5. window 远程桌面连接&am…

大模型实战—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

openEuler 知:版本比较

文章目录 前言工具oe_diffoepkg 前言 本文的“版本比较”主要是指比较 openEuler 操作系统两个版本之间的 rpm 包的版本差异&#xff0c;只比较版本差异&#xff0c;不比较文件内容的差异。 比较版本主要用于分析两个操作系统版本之间软件包的版本变化。 工具 oe_diff 工具…

CUDA编程00 - 配置CUDA开发环境

第一步&#xff1a; 在一台装有Nvidia显卡和驱动的机器上&#xff0c;用nvidia-smi命令查看显卡所支持cuda版本 第二步&#xff1a; 到Nvidia官网下载CUDA Toolkit并安装&#xff0c;CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可&#xff0c;安装完成用 …

【端智能】端智能技术演进与实践

什么是端智能技术 端智能&#xff08;On-Device Machine Learning&#xff09;是指把机器/深度学习算法模型应用和部署到端设备上&#xff0c;这里“端设备”是相对于云服务而言的&#xff0c;可以是手机&#xff0c;也可以是物联网IoT设备。 Google对端智能的介绍&#xff1…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.2 业务处理系统-解读

教材中,一会儿“业务处理系统”,一会儿“事务处理系统”,语法毛病一堆。真是清华的水平!!! 系统架构设计师教程 第3章 信息系统基础知识-3.2 业务处理系统 3.2.1 业务处理系统的概念3.2.2 业务处理系统的功能3.2.2.1 数据输入3.2.2.2 数据处理3.2.2.2.1 批处理 (Batch …

计算机体系结构||指令的调度和延迟分布(3)

实验3 指令的调度和延迟分布 3.1实验目的 &#xff08;1&#xff09;加深对指令调度技术的理解。 &#xff08;2&#xff09;加深对延迟分支技术的理解。 &#xff08;3&#xff09;熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。 &#xff08;4&#xff09;进一…

使用AI给编程赋能

传送门&#xff1a;https://www.bilibili.com/video/BV1pf421B71v?p23&vd_source092ecb16e8482a7243d0f8f7718c31a2 1. AIGC AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;人工智能&#xff0c;是计算机科学体系下的一个学科&#xff0c;是指通过计算机…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API&#xff0c; 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念&#xff0c;可以帮助你开始使用C#开发AutoCAD扩展&#xff1a; 准备开发环境 安装AutoCAD&#xff1a;确保你有一…

【Linux】线程互斥和同步

目录 线程互斥 相关概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁/解锁 可重入VS线程安全 概念 可重入与线程安全的联系 可重入与线程安全的区别 死锁 死锁的四个必要条件 避免死锁 避免死锁的算法 线程同步 条件变量 条件变量函数 初始…