SpringBoot(2.3.4.RELEASE) + Spring Cloud(Hoxton.SR8版本)+Zull作为网关路由, 升级到SpringBoot3.3.1。跨度还比较大,需要改动的地方还是比较多。各个组件需要进行版本适配,SpringCloud需要进行版本适配升级、spring-cloud-starter-netflix-zuul要替换为 spring-cloud-starter-gateway。
Spring Cloud Dependencies从2020.0.x版本开始,不包含spring-cloud-starter-netflix-zuul。
遇到的问题:
1.需要使用jdk17版本
2. javax.servlet.http.HttpServletRequest 替换为 jakarta.servlet.http.HttpServletRequest
javax.servlet.http. 替换为 jakarta.servlet.http.
Spring升级之后:
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();变为jakarta.servlet.http.HttpServletRequest
cn.dataenergy.insight.audit.InnerAuditRealm.getHttpServletRequest()
@Override
public HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
3.javax.validation.constraints 替换为 jakarta.validation.constraints
4.Spring Boot 3.3.1 推荐使用的 MyBatis 版本是 MyBatis 3.5.x。
Spring Boot 3.x 系列建议使用 MyBatis 3.5.x 系列,因为 MyBatis 3.5.x 支持最新的 Java 17 特性以及 Spring Boot 3.x API。
5.Spring Boot 3.3.1版本推荐使用的Dubbo版本为3.2.10。
6. Spring Boot 3.3.1,Service不能相互依赖。
SpringBoot2.6.0起及新版本中解决循环依赖问题。
https://blog.csdn.net/yuanjinshenglife/article/details/135901400
最简单的方法在yaml或properties中配置spring.main.allow-circular-references=true
#允许bean Service循环依赖
spring.main.allow-circular-references=true
7.Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.
同时包含了Spring MVC和Spring Cloud Gateway,而这两者是相互排斥的。Spring Cloud Gateway是基于Spring WebFlux的,因此需要使用反应式编程模型。
不能同时使用Spring MVC和Spring Cloud Gateway。(spring-boot-starter-web、spring-cloud-starter-gateway不能同时存在)
解决这个问题,有两个办法:
解决办法一:
Spring Cloud Gateway 是使用 netty+webflux 实现因此不需要再引入 web 模块。如果需要同时引入则需要增加配置项。
#Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway.
#同时使用Spring MVC和Spring Cloud Gateway
spring.main.web-application-type=reactive
解决办法二:
你不需要Spring MVC的功能,可以移除spring-boot-starter-web依赖。
8.Spring Boot 3.3集成swagger
https://springdoc.org/
https://springdoc.org/#migrating-from-springfox
Spring Boot 3.x与Swagger的集成主要使用springdoc-openapi-ui,这是因为springfox已经停止更新,不再支持新的Spring Boot版本。对于Spring Boot 3.3来说,推荐使用springdoc-openapi-starter-webmvc-ui,它支持OpenAPI 3规范,并且兼容最新的Spring Boot和Java版本。
<!-- openAPI包,替换 Swagger 的 SpringFox -->
<!-- https://blog.csdn.net/m0_74825093/article/details/144965950 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
swagger访问地址:http://127.0.0.1:8080/swagger-ui/index.html#/
https://blog.csdn.net/m0_74825093/article/details/144965950
https://blog.csdn.net/qq_55269149/article/details/137285469
https://www.showapi.com/news/article/67367f714ddd79f11a149aa8
9.查找spring-boot与spring-cloud适配版本的几种方式:
1)、https://github.com/spring-cloud/spring-cloud-release/wiki/Supported-Versions#supported-releases
2)、spring-boot 与 spring-cloud的对应关系:
https://www.cnblogs.com/MuXinu/p/17219436.html
浏览器直接访问: https://start.spring.io/actuator/info 返回报文当中包含的匹配的版本。
3)、https://start.spring.io/ 可以生成SpringBoot demo项目,自动生成Springboot和SpringCloud适配的版本。
spring-boot-starter-parent、spring-cloud-dependencies、spring-cloud-starter-alibaba-nacos-discovery 适配版本:
spring-boot-starter-parent 2.5.4、spring-cloud-dependencies 2020.0.3、spring-cloud-starter-alibaba-nacos-discovery 2021.1(nacos-client 1.4.1,发布的nacos服务版本为1.3.0)。
spring-boot-starter-parent 3.3.7、spring-cloud-dependencies 2023.0.5、spring-cloud-starter-alibaba-nacos-discovery 2023.0.1.0(nacos-client 2.3.2,发布的nacos服务版本为2.3.2)。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
10.https://start.spring.io/ 可以生成SpringBoot demo项目,进行验证Springboot 和 SpringCloud的对应版本。
参考:
https://blog.csdn.net/pumpkin84514/article/details/142371957
Spring Boot 从 2.7.x 升级到 3.3注意事项,有很多限制。
要求:Spring Boot 3.x 最低要求 JDK 17。如果你当前项目还在使用 JDK 8 或 JDK 11,首先需要升级到 JDK 17 或更高版本。
https://www.cnblogs.com/didispace/p/17934021.html
Spring Boot 2.x 到 3.2 的全面升级指南