SpringCloudgateWay升级到3.1.1版本你遇到这些坑了吗?
项⽬源码地址:
项⽬改造背景:
编程学习资料点击领取
⼀、项⽬简介
⾸先给⼤家看下我⽬前的整体项⽬构成:
⽗级项⽬bsolver
⽹关bsolver-gateway
代码⽣成器bsolver-generator
公共依赖bsolver-starter
页⾯bsolver-ui
⽤户服务bsolver-user
我的项⽬版本依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
复制代码
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
复制代码
⼆、升级⽅案
基于整体项⽬的架构,⽬前有两种升级⽅案:
⽅案⼀:将所有⼯程全部升级
⽅案⼆:将gateway单独升级
我最终选择⽅案⼆,为什么?必然经过尝试后遇到了更多的坑。
我们先看下gateway升级到3.1.1版本,其内部的依赖有哪些变化:
如上所⽰,组要是两点:
springcloud的版本达到了3.1.1
springboot的版本达到2.6.3
这与我前⾯使⽤的springboot版本2.3.12.RELEASE差了⼗万⼋千⾥,中间相隔了29个版本。
2.1 ⽅案⼀升级⽅式
下⾯开始⽅案⼀的升级⽅式,我的所有⼦⼯程都是依赖于⽗⼯程bsolver:
<parent>
<groupId>com.wjbgn</groupId>
<artifactId>bsolver</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
复制代码
所以我们只需要更改bsolver的版本就好了,这⾥直接使⽤2.6.3了:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
复制代码
相应的,既然springboot升级了,那么我们使⽤的nacos的相关依赖也是要升级的,此处就有⼀个⼩坑,我们在maven仓库看其版本:
正常约在上⾯的版本,其内部的依赖应该版本越⾼,但是在这个依赖当中:
2021.1对应springboot的版本是2.4.2
2021.0.1.0对应springboot的版本是2.6.3
⾄于为什么我也不想去追究了,所以此处显⽽易见,我们要选择2021.0.1.0:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.1.0</version>
</dependency>
复制代码
到此为⽌,我以为已经⼤功告成了,于是启动项⽬看看,好家伙,直接报出以下的异常:
Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
复制代码
经过⼀番百度,这是swagger2报出的错误。
没错我的项⽬使⽤了knife4j作为接⼝⽂档:
经过我半天的处理,发现仍然不能解决,最终得出的结论:swagger2针对springboot的⾼版本根本没做适配。
如果我要使⽤可以去降低springboot的版本,但是如此⼀来就针对springgateway的升级3.1.1版本就做不到了。接⼝⽂档很有必要,所以我最终放弃了⽅案⼀,尝试只在⽹关服务进⾏改造升级。
也正是如此,可以说是因祸得福吧,因为后⾯的坑还有呢
为什么要单独引⼊?
原本我是不知道要引⼊的,但是出问题了,所有通过⽹关访问的接⼝都不能访问,会报出503错误,即使是接⼝⽂档都不能幸免。
spring-cloud-starter-openfeign同样需要引⼊
如果你的⽹关服务后⾯想要正常通过feign接⼝调⽤其他服务,那么只管引⼊就好了。
2.3 改造成果
除⽹关以外的其他服务不⽤调整,我们直接启动所有的服务看结果:
nacos的服务注册
⽹关访问接⼝⽂档
⽹关l
我把整个⽂件放在这⾥,有些是设计JWT等等的依赖,还有⼀些打包的配置等等,但是不是本⽂重点,需要了解的朋友可以去开篇提到的源码仓库去下载。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /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.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wjbgn</groupId>
<artifactId>bsolver-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bsolver-gateway</name>
<description>⽹关</description>
<properties>
<java.version>1.8</java.version>
</properties>
<packaging>jar</packaging>
<dependencies>
<!-- mvnrepository/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.1</version>
为什么使用bootstrap?</dependency>
<!--升级到2.4.5后,l 不加载了 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.1.0</version>
</dependency>
<!--fegin组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.1</version>
</dependency>
<!-- Feign Client for loadBalancing -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.1.1</version>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- mvnrepository/artifact/com.github.xiaoymin/knife4j-spring-boot-starter -->
<dependency>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。