springboot3笔记

boot3和boot2有很大不同,必须了解。

例如有个老项目换新,你说这还不简单吗,就是maven换个版本号,10分钟搞定。。。

老项目由boot2升级到boot3

首先,这绝对不是换个版本的问题。
java8 -> jdk17 # 老服务器jdk也需要升级,如果换服务器还涉及到迁移
boot2 -> boot3 #
javax -> jakarta # 重 javax被完全移除
yaml -> 新yaml # 替换废弃配置

Spring Boot 2.x vs Spring Boot 3.x 完整改动清单(面试+升级必备)

这个是标准文档。

一、底层基线(最核心、必改)

1. JDK 强制门槛

  • Boot2(2.7):最低 JDK8,兼容 JDK11/17
  • Boot3:强制 JDK17+,不再支持 8/11;支持 JDK21 虚拟线程、ZGC 低延迟GC
    pom 必须修改:
<java.version>17</java.version>

2. Spring Framework 底层框架

  • Boot2 → Spring Framework 5.x
  • Boot3 → Spring Framework 6.x
    Spring6 移除大量过时API、支持AOT编译、适配Jakarta EE

3. 命名空间大迁移(javax → jakarta,升级最大工作量)

Oracle 移交Java EE给Eclipse,商标限制全量改名,所有EE相关import必须替换

Boot2 importBoot3 替换
javax.servlet.*jakarta.servlet.*
javax.persistence.*jakarta.persistence.*
javax.validation.*jakarta.validation.*
javax.websocketjakarta.websocket

注意:JDK原生javax.sql/javax.crypto不变,只改EE规范包。
IDEA:Refactor → Migrate Packages 一键全局替换

4. 嵌入式容器升级

  • Boot2:Tomcat9(Servlet4.0)
  • Boot3:Tomcat10(Servlet6.0),Jetty11、Undertow2;Tomcat10只认jakarta,旧javax依赖直接报错

二、持久层(JPA/Hibernate)重大改动

  1. Hibernate 5 → Hibernate 6
    • ID生成策略默认变更,旧配置spring.jpa.hibernate.use-new-id-generator-mappings废弃
    • 关联查询别名校验更严格,重复别名直接抛异常
    • 方言类包路径调整
  2. JPA API:javax.persistence全部改为jakarta.persistence
  3. MyBatis/MyBatis-Plus 必须升级适配Jakarta版本
    • mybatis-spring-boot-starter ≥3.0
    • mybatis-plus-boot-starter ≥3.5.3+

三、Spring Security 6(完全重构配置写法)

Boot2 旧写法(废弃,直接删除)

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {}
}

Boot3 新标准:去掉继承,注册SecurityFilterChain Bean

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
    return http.build();
}

其他安全变更:

  • CSRF 默认行为调整,CsrfTokenRequestAttributeHandler修改
  • OAuth2升级到OAuth2.1,原生支持PKCE
  • 密码加密、Session管理API重构
  • 默认安全策略更严格,静态资源默认拦截

四、Web模块(MVC、WebClient、声明式HTTP)

  1. RestTemplate 不再推荐,主推 WebClient(响应式、非阻塞)
  2. 新增 @HttpExchange 声明式HTTP客户端(替代Feign原生方案)
  3. 全局异常处理 ResponseEntityExceptionHandler 方法签名改变
  4. 请求/响应注解包名变更:javax.servlet.httpjakarta.servlet.http
  5. WebFlux:Reactor3.4 → Reactor3.5,响应式底层优化

五、云原生新能力(Boot3独有)

1. GraalVM Native Image 原生镜像官方支持

Boot2需要第三方插件折腾;Boot3内置AOT编译、native插件

  • 启动从秒级降到毫秒级,内存占用减半
  • 适配Serverless、轻量微服务
  • 引入starter:spring-boot-starter-aot

2. 统一可观测性 Observability

Boot2:仅Actuator简单指标
Boot3:Micrometer Tracing + OpenTelemetry 原生集成,链路追踪、日志、指标一体化,开箱即用分布式追踪,无需额外埋点改造

六、配置文件 application.yml/property 变更

  1. 大量配置项重命名、废弃,官方提供迁移工具:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>

启动时控制台打印所有过时配置并给出替换方案。
2. JPA旧属性废弃:

  • spring.jpa.hibernate.naming.physical-strategy 行为微调
  • 旧Hikari嵌套配置少量重构
  1. Actuator 变更:
    • 默认暴露端点更少,安全收紧
    • 指标前缀、监控路径内部实现重构
  2. 日志:移除老旧spring-boot-starter-log4j,仅支持Log4j2、SLF4J

七、废弃/移除的功能与依赖

  1. 完全移除 WebSecurityConfigurerAdapter
  2. 移除JAX-RS旧支持、老旧缓存抽象
  3. 废弃大量2.x过时API、构造器重载
  4. Spring Boot 2.7已停止官方维护,3.x长期支持
  5. 旧版Swagger2(springfox)不兼容jakarta,必须替换为SpringDoc OpenAPI3

八、第三方生态适配要点

  1. 所有依赖必须升级Jakarta兼容版本:
    • Validation:hibernate-validator 6 →7
    • 连接池、Redis、MQ客户端同步升级
  2. 工具类:Shiro、Sa-Token、XXL-JOB等中间件必须升级适配jakarta版本,否则引入javax冲突包启动报错
  3. Docker镜像基础镜像必须切换JDK17基础镜像

九、极简升级步骤总结(实操顺序)

  1. JDK升级到17,pom指定java.version=17
  2. Boot父工程升级到3.x
  3. IDE一键迁移 javax → jakarta 所有导入
  4. Security重写配置(删除WebSecurityConfigurerAdapter)
  5. 升级MyBatis、SpringDoc、Validator等第三方依赖
  6. 引入配置迁移器,修正yml废弃配置
  7. 修复Hibernate6 ID生成、SQL别名报错
  8. 测试Web接口、登录权限、定时任务、监控链路

需要我给你一份Security6完整可运行配置模板,或者一份pom升级最小修改示例吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值