SpringBoot3升级记录
环境
JDK17
SpringBoot 3.3.2
spring-cloud-dependencies 2023.0.1
spring-cloud-alibaba-dependencies 2023.0.1.2
NACOS升级(重要)
新版本nacos客户端新增grpc连接nacos服务端(版本2.x),服务端需升级至2.x版本,端口新增port+1000
提供rpc支持
配置文件导入形式变更
SpringBoot
从2.4.x版本开始支持导入文件的方式来加载配置参数,从 Spring Boot 2.6.x 开始,不再默认集成 spring-cloud-starter-bootstrap
,即不再支持从bootstrap.yml
文件中读取配置,为过渡版本使用习惯,仍保留bootstrap.yml加载配置:
引入bootstrap.yml
(中台默认)
手动引入spring-cloud-starter-bootstrap
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>${cloud-bootstrap.version}</version>
<!-- <cloud-bootstrap.version>4.1.4</cloud-bootstrap.version>-->
</dependency>
脱离bootstrap.yml
改用spring.config.import
机制来加载属性:默认不再读取bootstrap.yml的配置文件,配置文件以application开头
数据库驱动
中台统一管理数据库驱动版本:
mariadb-java-client
驱动在3.x之后的版本为了与mysql作区分,url写法改为jdbc:mariadb://IP:PORT
,不再兼容jdbc:mysql://IP:PORT
(附)
mysql-connector-java
更名为mysql-connector-j
Redis配置调整
spring:
data:
redis:
host: ${redis.memory.ip}
port: ${redis.memory.port}
database: 0
password: ${redis.memory.password}
jedis:
pool:
max-active: 32
max-wait: 2000
max-idle: 16
min-idle: 4
Maven版本要求3.6.3及以上
Zipkin集成问题
由于Spring Cloud Sleuth最新版本只支持Spring Boot 2.7.x,核心项目已经迁移到Micrometer Traceing项目,Spring Boot 3.x版本要实现分布式链路追踪需要集成Micrometer。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--指标追踪-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing</artifactId>
</dependency>
<!--适配zipkin的桥接包-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-observation</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-micrometer</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-brave</artifactId>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.15.1</version>
</dependency>
</dependencies>
配置文件变更,例:
management:
zipkin:
tracing:
endpoint: http://localhost:9411/api/v2/spans
tracing:
sampling:
probability: 1.0
logback日志配置调整
logback部分默认配置调整:
其他配置请参考源码配置:spring-configuration-metadata.json
RocketMQ集成问题
SpringBoot3.0已经放弃了spring.factories自动装配,需创建/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件进行兼容:
org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration
附ISSUE:
Servlet调整
servlet相关导入包调整为jakarta.servlet.*
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${jakarta.servlet-api.version}</version>
</dependency>
其他
@Resource注解导入的包改为
jakarta.annotation.Resource
Springboot部分注解调整:@Valid、@NotBlank等注解调整包路径,删除原有import 包,
alt+enter
自动导入包。JDK的升级存在部分方法调用的调整,具体代码需具体分析,例:
sun.misc.BASE64Decoder
和sun.misc.BASE64Encoder
报错,找不到该类:原因为sun.misc.BASE64Decoder
和sun.misc.BASE64Encoder
在JDK9及以后被弃用并且不再受支持,需改用java标准库java.util.Base64
进行Base64编码和解码。其他SpringBoot方法调整,具体代码需具体分析