前言
之前我的微服务版本是java8、spring-boot2.4.2、spring-cloud2020.0.0、spring-cloud-alibaba2021.1,但是最近随着spring-boot3.0版本的发布,再加上官方已经说明最低版本支持java17,所以就有了这篇文章。
1.8
2.4.2
2020.0.0
2021.1
目前,Oracle 官方支持的最新 LTS(长期支持)版本是 JDK 17,而 OpenJDK 社区也正在积极开发和维护 JDK 17。
因此,如果你考虑升级 Java 版本,并且希望使用一个稳定和可靠的版本,那么建议选择 JDK 17。JDK 17 包含了很多新特性和改进,例如:
新的垃圾回收器:ZGC 和 Shenandoah;
增强的 Switch 表达式;
改进的异常处理;
新的日期和时间 API;
...
此外,JDK 17 也提供了广泛的操作系统、硬件平台和云平台支持,可以适用于各种不同的应用场景。同时,由于 JDK 17 是一个 LTS 版本,因此可以获得更长时间的更新和支持,从而提供更好的稳定性和安全性。
总之,建议选择 JDK 17 作为升级目标,以获得最佳的兼容性、稳定性和安全性。
版本参照
下面列出了spring-boot、spring-cloud和spring-cloud-alibaba的版本对应关系,选择合适的版本不要出现兼容性问题。
spring-boot和spring-cloud版本对应关系
spring-cloud和spring-cloud-alibaba版本对应关系
有了上面的版本对应关系,于是我们选择了如下的版本:
17
3.0.2
2022.0.0
2022.0.0.0-RC2
升级微服务
1、安装java17
这里不做详细介绍了,这个应该是必备的,我给出下载地址:java17下载和jdk安装
2、安装maven 3.9
这里不做详细介绍了,这个应该是必备的,我给出下载地址:maven下载和maven安装
3、配置idea
3.1设置版本都为java17
3.2添加jdk17
3.3language level选择jdk17
3.4modules中设置sources的language level都是project default即可
保存并退出即可!
4、配置pom.xml
下面是我的pom.xml大家可以做为升级参考:
org.springframework.boot
spring-boot-starter-parent
3.0.2
17
3.0.2
2022.0.0
2022.0.0.0-RC2
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
jakarta.platform
jakarta.jakartaee-api
10.0.0
provided
org.projectlombok
lombok
1.18.28
provided
org.springframework.cloud
spring-cloud-stream
4.0.1
org.springframework.cloud
spring-cloud-stream-binder-kafka
org.springframework.cloud
spring-cloud-stream-binder-rabbit
org.springframework.boot
spring-boot-starter-data-elasticsearch
com.spotify
dockerfile-maven-plugin
1.4.10
src/main/docker/Dockerfile
target/${project.build.finalName}.jar
org.springframework.boot
spring-boot-maven-plugin
上面引入了jakartaee
依赖,这是有历史原因的,感兴趣的可以看看[这篇文章 ]()
5、以javax开头的全部换成jakarta开头
修改前:
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
修改后:
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
6、spring.redis换成spring.data.redis
如果你使用了redis,那么你就要调整成下面的形式:
调整前:
spring:
redis:
database: 0
host: xxx.xxx.xxx.xxx
password: password
port: 6379
timeout: 5000ms
lettuce:
pool:
max-active: 500
max-wait: 500ms
max-idle: 500
min-idle: 0
调整后:
spring:
data:
redis:
database: 0
host: xxx.xxx.xxx.xxx
password: password
port: 6379
timeout: 5000ms
lettuce:
pool:
max-active: 500
max-wait: 500ms
max-idle: 500
min-idle: 0
7、spring-cloud-stream 换成4.0.1版本
这是spring-cloud-stream的bug,如果不换成4.0.1的话会报错:
2023-06-18T11:25:07.771+08:00 WARN 68477 --- [ main] o.s.c.s.binder.DefaultBinderFactory : Failed to propagate child beans. This may cause issues in your application
java.lang.IllegalStateException: kafka-binder_context has not been refreshed yet
所以换成下面的包就没问题:
org.springframework.cloud
spring-cloud-stream
4.0.1
8、修改dockerfile
修改前:
FROM openjdk:8-jdk-alpine
MAINTAINER "zhangwei"
RUN mkdir -p /usr/local/spaceservice
ARG JAR_FILE
ADD ${JAR_FILE} /usr/local/spaceservice/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/usr/local/spaceservice/app.jar"]
EXPOSE 8902
修改后:
FROM openjdk:17-jdk
MAINTAINER "zhangwei"
RUN mkdir -p /usr/local/spaceservice
ARG JAR_FILE
ADD ${JAR_FILE} /usr/local/spaceservice/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/usr/local/spaceservice/app.jar"]
EXPOSE 8902
9、修改k8s file
修改前:
...
template:
metadata:
labels:
app:
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk
...
修改后:
...
template:
metadata:
labels:
app:
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-17-openjdk
...
这样就完成了升级!
10、jenkins安装java17和maven3.9
总结
1、我也是查看别人的文章和自己摸索出来的,基于本人能力有限,如果出现问题请不吝赐教。