目录
前言
在搭建Spring Cloud Alibaba微服务项目架构的时候,需要选择Spring Boot和Spring Cloud进行兼容的版本号,如果版本关系不对应,可能导致项目产生未知的错误。并且Spring Boot 3.x更新后最低支持jdk17,甚至idea创建spring boot项目都选不到jdk1.8和Spring Boot 2.x了,搜索了一下目前也没有最新的版本建议,遂自己写一篇总结一下。
一、Java版本推荐
先说说为什么选择jdk1.8。
截至2025年5月,Java最新版本为2025年3月发布的Java24,它是一个非长期版本,但是那句话怎么说,你发任你发,我用Java8,哈哈。
主要是由于国内存在着大量的老旧项目,jdk的升级会导致牵一发而动全身,即使是我现在创建新项目,因为服务器上运行着大量的jdk1.8的项目以及对应的其他应用服务,新的项目如果采用比较新的jdk17,会引起很多不必要的麻烦,企业开发一定是怎么稳定怎么来,自己的个人项目可以优先使用新技术。
1. Java版本分类
Java通常分为三个主要版本:
SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
我们平常说的Java版本指的就是Java SE
Java SE的版本分为 LTS(Long-Term Support,长期支持版) 和 Non-LTS(非长期支持版),它们的主要区别如下:
对比项 | LTS 版本(长期支持) | Non-LTS 版本(非长期支持) |
---|---|---|
发布周期 | 每 2 年 一次 | 每 6 个月 发布一次 |
支持时长 | 官方长期支持(8 年+) | 仅支持 6 个月 |
适用场景 | 生产环境、企业级项目、长期维护的系统 | 个人学习、实验性项目、尝鲜新特性 |
稳定性 | 更稳定,企业级可用 | 新特性多,但可能不稳定 |
安全性 | 持续提供安全更新和 bug 修复 | 仅在生命周期内提供短期修复 |
新特性 | 主要以稳定性和性能优化为主 | 包含最新特性,但可能在下个版本修改或移除 |
关于Java和jdk的版本号关系,Java9之前对应jdk版本为1.x,之后就是一一对应了
JDK版本官网
官网还可以看到2025-04-15更新了jdk1.8,版本号到了8u451
2. 各版本维护时间
Oracle Java SE 支持路线图
可以看到Java8持续支持时间到2030年,目前还不用担心
3. 各版本占比
New Relic 2024 Java 生态系统状态报告
如图所示,虽然到2024年,Java17占比最大,但是在企业端新的项目仍然推荐Java8,如果是新的公司或部门,新的服务器,使用Java17就是一个不错的选择。
二、spring各框架版本对应关系
浪费了一点口舌,终于要说到spring相关的框架了。
一切的起点是因为Spring Boot从3.0版本开始不再支持Java8,最低支持Java17,上一个支持的版本是2.7
Spring Boot 3.0 Release Notes
接下来看Spring Cloud,支持Spring Boot 2.7的最高版本是Spring Cloud 2021.0.x
https://spring.io/projects/spring-cloud
最后再来看看Spring Cloud Alibaba,同时支持jdk1.8、Spring Boot 2.6、Spring Cloud 2021的是2021.x分支,这里把Spring Boot 2.6升级为2.7也没问题
Spring Cloud Alibaba/README-zh.md
分支具体版本:GitHub/Wiki/版本说明,目前已经不更新了,阿里发布了自己的Spring Cloud Alibaba网站
例如2021.x 分支的具体版本说明:版本发布说明
2021.x 分支
适配 Spring Boot 2.4,Spring Cloud 2021.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2021.0.6.0* | Spring Cloud 2021.0.5 | 2.6.13 |
2021.0.5.0 | Spring Cloud 2021.0.5 | 2.6.13 |
2021.0.4.0 | Spring Cloud 2021.0.4 | 2.6.11 |
2021.0.1.0 | Spring Cloud 2021.0.1 | 2.6.3 |
2021.1 | Spring Cloud 2020.0.1 | 2.4.2 |
三、2025年版本推荐
根据上图所示,阿里官方推荐的是
Spring Cloud Alibaba 2021.0.6.0
+Spring Cloud 2021.0.5
+Spring Boot 2.6.13
,这个是比较稳定的,但官方并不会及时更新其他框架版本,而且都是几年前的东西了,后续各框架更新都是进行修复问题,不会有新的大变动,推荐都使用对应分支内的最新版本。
1. Spring Boot
Spring Boot的release页面因为已经过去太多了,不太好找,在tag这里看到3.0前面最新的是2.7.18
版本链接:https://github.com/spring-projects/spring-boot/releases/tag/v2.7.18
更新时间是2023-11-23,距今已经一年半了,可以算是最终版本了
2. Spring Cloud
Spring Cloud 2021.0.x分支最新版本是2021.0.9
版本链接:https://github.com/spring-cloud/spring-cloud-release/releases/tag/v2021.0.9
更新时间是2023-12-19,距今也一年半了
3. Spring Cloud Alibaba
Spring Cloud Alibaba 2021分支最新版本是2021.0.6.2
版本链接:https://github.com/alibaba/spring-cloud-alibaba/releases/tag/2021.0.6.2
更新时间是2024-12-12,只有半年,但是也只是优化了两个Nacos的功能
4. 总结
最终版本还是要去maven仓库看一眼,万一GitHub有但是maven中央仓库(https://mvnrepository.com/)没有就需要再往前一个版本
我这里是微服务项目,通过bom的方式引入各框架的版本管理,所以找每个框架后缀是dependencies的库,全都没问题,最终版本如下:
spring-boot:2.7.18
spring cloud:2021.0.9
spring cloud alibaba:2021.0.6.2
四、pom.xml文件示例
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>
<properties>
<!-- 版本查找网站
https://mvnrepository.com/
https://repo1.maven.org/maven2/
https://github.com/
-->
<!-- 引入依赖管理版本-->
<!-- spring boot最后支持jdk1.8的版本为2.7.x,从3.x开始就需要jdk17了-->
<!-- spring cloud、spring cloud alibaba均选择支持spring boot的最新版本2021.x,目前已基本稳定-->
<spring-boot.version>2.7.18</spring-boot.version><!-- 2023-11-23-->
<spring-cloud.version>2021.0.9</spring-cloud.version><!-- 2023-12-19-->
<spring-cloud-alibaba.version>2021.0.6.2</spring-cloud-alibaba.version><!-- 2024-12-02-->
</properties>
<dependencyManagement>
<dependencies>
<!-- 通过import类型为pom的模块实现maven多继承-->
<!-- spring boot bom -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud bom -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba bom -->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>