首先说一下问题由来,想了解一下大型的项目于是在假期捯饬了 谷粒商城的项目,一开始一帆风顺,谁知后来大风大浪,因为视频和当下不是同一时期导致版本不一致,出现了依赖版本冲突的问题,以及idea的BUG问题,导致浪费了很多时间纠结。
用OpenFeign尝试远程调用出现的BUG,其它正常。
IDEA 有一个BUG, 经过百度我了解到Feign无法调用是因为没有引入 一个
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
这么一个依赖,用来负载均衡,也百度到解决是因为cloud和boot的依赖版本冲突,当时尝试对boot和cloud进行降级解决冲突,但是当我准备降级的时候,更新Maven的依赖时,下载没有问题但是pom却爆红,就上面的boot依赖图片。
然后正好启动也报错,就误以为是不能降级,其实是其它地方的依赖的问题,让这个爆红误以为是错误的源泉,随后反反复复包括把项目删除,重新从之前的最后版本的git上面拉取可执行的项目源码,继续改善,尝试过换maven镜像为阿里云的和华为云的但是仍然无法解决问题。
随后再次拉取一个新的项目,换取镜像下载之后开始逐个测试,不求一步到位,当我改变依赖的时尝试重启、新增注解时尝试重启、注入到注册中心时尝试重启等等,最终当一切元素都稳定了,开始解决版本依赖问题,再次尝试上面的爆红问题,因为下载没有报错,但是pom.xml中的boot版本还是爆红,大胆的尝试直接重启,发现启动成功。(这个时候,我就已经确定是IDEA的版本BUG,因为我是最新版的IDEA,所以可能出现这个BUG,现在有一丝后悔更新最新了),随后开始找到与cloud的对应版本号,尝试重启。
对应的boot和cloud如下图:
我用的2.3.2RELEASE 对应的采用 Cloud版本就是Hoxton.SR8, 尝试重启发现没有报错,开始定义feign,启用FeignClients尝试重启一切正常,这个时候我已经非常自信的认为没有问题了(做过SpringCloud项目的开发以及非跟踪课程的自主探索Cloud项目经验),
再次修改提供者的接口重启成功之后进行远程调用,成功获取到提供者的数据反馈。
作者IDEA版本:2020.3.2
曾经尝试的boot和cloud的对应版本:2.4.2、2020.0.1
吸取到的教训:为了学习,可以探索最新花时间尝试解决问题并提高了解决问题的能力,但是在生产项目中就完全没有必要追求最新给自己找到了那么多的麻烦,如果在生产中遇到这种不知方向的问题是很浪费时间的。最终建议不要追求最新,稳重为主。
本次主要遇到的IDEA的BUG和Cloud的版本冲突:不要过于相信软件的能力,一切稳定为主。
最后作者发一下自己使用的pom配置和common中的pom配置,也为自己以后作为一个参考。
首先是服务的(任意):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-member</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-member</name>
<description>谷粒商城-会员服务</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
随后是引入的common中的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>gulimall</artifactId>
<groupId>com.atguigu.gulimall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gulimall-common</artifactId>
<description>谷粒商城-公共依赖</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- Mybatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.14</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- Mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.1.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
希望对你有帮助。