spring-cloud-starter-openfeign的maven引入方式引发的故障,分析其原理

news2024/11/25 8:15:19

一、背景

OpenFeign是一种声明式的REST客户端,openfeign是开发常用的对外提供服务,以及调用外部提供的openfeign接口的工具类,基于Java的HTTP客户端库,用于简化HTTP请求和响应的处理。OpenFeign支持多种编解码器,包括JSON、XML、Form等,开发者可以根据需要选择合适的编解码器。同时,它支持请求拦截器和响应拦截器,可以通过实现请求拦截器和响应拦截器来对HTTP请求和响应进行处理,例如添加认证信息、重试等。此外,OpenFeign还支持负载均衡,集成了Hystrix熔断器,可以在服务调用失败或超时时进行降级处理,保证服务的可靠性和可用性。
虽然它是一款很好用的jar,但是最近我在一个SpringCloud项目的引入上却出现了问题

1.1现象

通过2.1的第一种方式引入,可以在开发编译期成功引入openfeign工具类,但是在运行期却抛openfeign的jar包未找到

二、现象分析

在这里插入图片描述
字面意思系统在启动的时候没有找到spring-cloud-starter-openfeign的jar包,但是通过检查程序的pom.xml文件,我们通常按照SpringBoot推荐的方式进行openfeign的引入方式如下:

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

这样的引入启动就会抛如上的错误,修改引入如下:(指定版本)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>

启动就正常了

三、根源分析

通常我们在使用Spring Cloud 项目的时候,推荐使用starter方法进行第三依赖的引入,并且 spring-cloud-starter,我们只需要指定SpringCloud的版本即可,其他通过spring-cloud-starter引入的项目,默认会根据指定的SpringCloud版本进行自动版本引入,无需我们为版本不兼容烦恼,让程序员更多关注业务开发,将一些模板化的固定模式的内容交给spring-cloud-starter这种模式进行统一管理。
发生这种异常,通常出现在两种情况下,第一种情况:初步搭建环境的时候就抛错,第二种情况:就是开发很久的系统突然要新增或修改功能的时候。这两种情况我们都需要启动项目,然后进行调试工作。
第二种情况是最令人头疼的,通常这种异常抛出,很难去想到是pom文件引入导致的问题,容易让解决问题的思路走向歧途。

3.1、开发编译期成功引入了openfeign工具类,但在运行期抛出openfeign的jar包未找到的错误

出现这种情况可能有以下几种情况:

  1. 引入的openfeign版本与运行环境不兼容。在运行期,JVM无法找到对应的openfeign jar包,可能是由于引入的版本与运行环境不兼容。检查您使用的openfeign版本是否与您的Spring Cloud版本兼容。
  2. 依赖关系未正确配置。在运行期,JVM无法找到对应的openfeign jar包,可能是由于依赖关系未正确配置。检查您的项目依赖是否正确配置,并确保所需的jar包已正确引入。
  3. 构建工具未正确解析依赖。如果您使用构建工具(如Maven或Gradle)来构建项目,可能是由于构建工具未正确解析依赖导致JVM无法找到对应的openfeign jar包。检查您的构建配置文件是否正确配置了依赖,并尝试重新构建项目。
  4. 手动删除或移动了jar包。在项目开发过程中,有时候会手动删除或移动jar包,这可能会导致运行期找不到对应的jar包。检查您的项目结构,确保所需的jar包存在于正确的位置,并尝试重新构建项目。

最终通过指定OpenFeign的版本解决了这个异常,接下来总结一下那些情况需要明确指定openfeign的版本:

3.2、那些情况需要指定openfeign版本

  1. 当项目依赖的spring cloud版本与spring-cloud-starter-openfeign的默认版本不兼容时,需要指定合适的版本。
  2. 当项目需要使用特定版本的openfeign功能或修复某些已知问题时,需要指定相应的版本号。

例如,当Spring Cloud的版本升级时,可能会引入一些新的特性或者修复一些已知的问题,此时可能需要升级spring-cloud-starter-openfeign的版本以获得这些新特性或修复。另外,当项目需要使用特定版本的OpenFeign客户端时,也需要指定相应的版本号。

3.3、那些情况不需要指定openfeign版本号

  1. 当项目依赖的spring cloud版本与spring-cloud-starter-openfeign的默认版本兼容时,可以不需要指定版本。
  2. 当项目使用的是较新的spring cloud版本,并且该版本已经包含了spring-cloud-starter-openfeign的最新版本时,也不需要指定版本。
  3. 此外,如果项目使用的是Spring Cloud的稳定版本,并且该稳定版本已经经过了广泛的应用和测试,那么引入spring-cloud-starter-openfeign也可能不需要指定版本

四、总结

这个问题其实比较典型,我在踩这个坑的时候,有可能通过spring-cloud-starter-openfeign引入第三方包,但是其Spring Cloud没有与之合适的版本,所以需要我们在引入的时候特别指定一下。如果文章有不正确的地方,还望多多指正,希望我们做成长路上的好伙伴

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

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

相关文章

人工智能在安全领域的应用

ChatGPT 等 AI 应用在网络安全领域的应用效果明显&#xff0c;其自动编程能力、分析能力及自身集成的知识库能够帮助网络安全从业者提升工作效率&#xff0c;改进组织的网络安全计划。 &#xff08;一&#xff09;代码生成与检测能力 可用于开发漏洞挖掘工具。如目前可以利用…

【sgAutocomplete】自定义组件:基于elementUI的el-autocomplete组件开发的自动补全下拉框组件(带输入建议的自动补全输入框)

特性&#xff1a; 1、支持本地保存选中过的记录 2、支持动态接口获取匹配下拉框内容 3、可以指定对应的显示label和字段组件key 4、自动生成速记符字段&#xff08;包含声母和全拼两种类型&#xff09;&#xff0c;增强搜索匹配效率 sgAutocomplete源码 <template><!…

mjpg-streamer配置其它端口访问视频

环境 树莓派4B ubuntu 20.04 U口摄像头 确认摄像头可访问 lsusb查看 在dev下可查看到video* sudo mplayer tv://可打开摄像头并访问到视频 下载mjpg-streamer并编译安装 在github下载zip包&#xff0c;下载的源码&#xff0c;需要编译安装 unzip解压 cd mjpg-streamer/mjp…

win11 powershell conda 激活环境后不显示环境名称

win11 powershell conda 激活环境后不显示环境名称 问题现象解决方法 问题现象 安装 Anaconda 后在 powershell 中激活环境后&#xff0c;命令行前面不显示环境名称 解决方法 在 powershell 中执行 conda init 重新打开 poweshell 出现以下问题&#xff0c;请参考 win11 p…

C语言-每日刷题练习

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

基于hadoop下的spark安装

目录 简介 安装准备 spark安装 配置文件配置 简介 Spark主要⽤于⼤数据的并⾏计算&#xff0c;⽽Hadoop在企业主要⽤于⼤数据的存储&#xff08;⽐如HDFS、Hive和HBase 等&#xff09;&#xff0c;以及资源调度&#xff08;Yarn&#xff09;。但是也有很多公司也在使⽤MR2进…

坚鹏:中国邮政储蓄银行数字化转型战略、方法与案例培训

中国邮政储蓄银行拥有优良的资产质量和显著的成长潜力&#xff0c;是中国领先的大型零售银行。2016年9月在香港联交所挂牌上市&#xff0c;2019年12月在上交所挂牌上市。中国邮政储蓄银行拥有近4万个营业网点&#xff0c;服务个人客户超6.5亿户。2022年&#xff0c;在《银行家》…

关于大模型ChatGLM3-6B在CPU下运行

最近在调研市场上语言大模型&#xff0c;为公司的产品上虚拟人的推出做准备。各厂提供语言模型都很丰富&#xff0c;使用上也很方便&#xff0c;有API接口可以调用。但唯一的不足&#xff0c;对于提供给百万用户使用的产品&#xff0c;相比价格都比较贵。所以对ChatGLM3-6B的使…

仿照MyBatis手写一个持久层框架学习

首先数据准备&#xff0c;创建MySQL数据库mybatis&#xff0c;创建表并插入数据。 DROP TABLE IF EXISTS user_t; CREATE TABLE user_t ( id INT PRIMARY KEY, username VARCHAR ( 128 ) ); INSERT INTO user_t VALUES(1,Tom); INSERT INTO user_t VALUES(2,Jerry);JDBC API允…

2024 年最值得推荐的 7 个 Vue3 组件库

你好&#xff0c;我是 Kagol。 Vue 是一款易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的渐进式 JavaScript 框架&#xff0c;深受广大开发者的喜爱&#xff0c;Vue3 更是推出了 Composition API&#xff0c;让逻辑复用更友好。 马上就到 2024 年了&#xff0c;如果…

html通过CDN引入Vue使用Vuex以及Computed、Watch监听

html通过CDN引入Vue使用Vuex以及Computed、Watch监听 近期遇到个需求&#xff0c;就是需要在.net MVC的项目中&#xff0c;对已有的项目的首页进行优化&#xff0c;也就是写原生html和js。但是咱是一个写前端的&#xff0c;写html还可以&#xff0c;.net的话&#xff0c;开发也…

dell r720远程网络安装ubuntu20.04(无U盘)

登陆后界面&#xff0c;在主界面上&#xff0c;我们就可以看到各个硬件组件的状态。在快速启动任务栏中&#xff0c;可以对系统电源进行操作&#xff0c;如开机、关机等。安装操作系统&#xff0c;在虚拟控制台预览处点击>启动 按照浏览器出现的提示确定安装控件等&#x…

西南科技大学数字电子技术实验四(基本触发器逻辑功能测试及FPGA的实现)FPGA部分

实验目的1、掌握基本RS触发器、集成D触发器和JK触发器的逻辑功能及测试方法。 2、熟悉D触发器和JK触发器的触发方法。 3、熟悉用JK和D触发器构成其他功能触发器的方法。 4、学会用FPGA实现本实验内容。 实验原理1、D触发器 Qn+1 = D 2、JK触发器 3、RS触发器 程序清单(每…

day15_java的网络编程(简述)

计算机网络 一、什么是计算机网络 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息&#xff0c;共享硬件、软件、数据信息等资源。 二、计算机网络主要功能 资源共享 信息…

SpringBoot整合RocketMQ,高手都是这么玩的!

今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分&#xff0c;第一部分实现SpringBoot与RocketMQ的整合&#xff0c;第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们&#xff0c;第三部分介绍如何封装RocketMQ以便更好地使用。 1. SpringBoo…

微信小程序、uniapp选择器,包含一级,二级级联,三级级联

效果预览&#xff1a; 已知问题: 不能与页面下拉一起使用 滑动选择后,scroll-view指定scrollTop时,scrollview滚动会有500ms左右的延迟(官方help),现在加了个loaing 参数说明: show(类型:Boolean,默认 false):控制组件显示隐藏 list(类型:Array):选择器绑定的数据 type(类型…

我的网站服务器被入侵了该怎么办?

最近有用户咨询到德迅云安全&#xff0c;说自己再用的网站服务器遇到了入侵情况&#xff0c;询问该怎么处理入侵问题&#xff0c;有什么安全方案可以解决服务器被入侵的问题。下面&#xff0c;我们就来简单讲下服务器遇到入侵了&#xff0c;该从哪方面入手处理&#xff0c;在预…

pandas 使用方法(1)

目录 1. excel 表格处理 (1) 读取excel 表格 (2) 抽取excel表部分列数据 (3) 保存数据到excel表格 (4) 保存到 excel 表中的不同sheet 2. 判断二维数组中的某个数值是否为空 3. 删除二维数组中的空行 4. 在列表中添加某列属性 本文是将使用pandas过程中遇到的问题进行了…

SpringDataJPA基础

简介 Spring Data为数据访问层提供了熟悉且一致的Spring编程模版&#xff0c;对于每种持久性存储&#xff0c;业务代码通常需要提供不同存储库提供对不同CURD持久化操作。Spring Data为这些持久性存储以及特定实现提供了通用的接口和模版。其目的是统一简化对不同类型持久性存储…

基于Java SSM框架实现个性化影片推荐系统项目【项目源码+论文说明】

基于java的SSM框架实现个性化影片推荐系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;个性化影片推荐系统当然也不能排除在外。个性化影片推荐系统是以实际运用…