SpringBoot 2.x 和 3.x 的核心区别,这些变化你必须知道

为什么 Spring Boot 3.x 这么重要?

因为它不仅仅是加了几个新功能,而是整个技术地基都变了

下面我们举几个例子来了解一下。


1. 包名的更新:javax → jakarta

这是2.x升级到3.x时,改动最大的地方

Spring Boot 2.x(老代码)

java

体验AI代码助手

代码解读

复制代码

import javax.persistence.Entity; import javax.persistence.Id; import javax.servlet.http.HttpServletRequest; @Entity public class User { @Id private Long id; private String name; // getter/setter }

Spring Boot 3.x(新代码)

java

体验AI代码助手

代码解读

复制代码

import jakarta.persistence.Entity; // 注意:javax → jakarta import jakarta.persistence.Id; import jakarta.servlet.http.HttpServletRequest; // 同样变了 @Entity public class User { @Id private Long id; private String name; // getter/setter }

划重点

  • 所有 javax.* 都要改成 jakarta.*!
  • 如果你用的是 JPA、Servlet、Validation 等技术,几乎每个 Java 文件都要改
  • 建议使用 IDE 的全局替换功能,但要小心第三方库是否支持。

2. 安全配置

Spring Boot 3.x 默认使用 Spring Security 6,配置方式大变。

Spring Boot 2.x 配置方式

java

体验AI代码助手

代码解读

复制代码

@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/public/**").permitAll() .anyRequest().authenticated() .and() .formLogin(); } }

注意:WebSecurityConfigurerAdapter在Spring Security 6中已被废弃

Spring Boot 3.x 推荐方式(使用 Lambda DSL)

java

体验AI代码助手

代码解读

复制代码

@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authz -> authz .requestMatchers("/public/**").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .permitAll() ); return http.build(); } }

好处

  • 更函数式,代码更清晰。
  • 不用继承,更灵活。
  • 编译时就能发现错误,而不是运行时报错。

3. 原生镜像(GraalVM)

Spring Boot 3.x 原生支持 GraalVM,可以把 Java 应用编译成原生可执行文件

如何启用原生镜像?

在 pom.xml 中加入插件:

xml

体验AI代码助手

代码解读

复制代码

<plugin> <groupId>org.graalvm.buildtools</groupId> <artifactId>native-maven-plugin</artifactId> </plugin>

然后运行:

bash

体验AI代码助手

代码解读

复制代码

./mvnw -Pnative native:compile

编译完成后,你会得到一个不依赖 JVM 的可执行文件,比如 myapp。

运行它:

bash

体验AI代码助手

代码解读

复制代码

./myapp

你会发现:

  • 启动时间:从 5 秒 → 0.1 秒
  • 内存占用:从 300MB → 50MB

特别适合:Serverless、微服务、边缘计算等资源敏感场景。


4. 云原生支持:Liveness 和 Readiness

Spring Boot 3.x 的健康检查更专业,适合 Kubernetes。

配置 application.yml

yaml

体验AI代码助手

代码解读

复制代码

management: endpoint: health: show-details: always endpoints: web: exposure: include: health,info,liveness,readiness

访问新端点

  • GET /actuator/health/liveness → 检查应用是否“活着”(是否崩溃)
  • GET /actuator/health/readiness → 检查应用是否“就绪”(是否可以接收流量)

K8s 可以用这两个接口做更精准的健康检查,避免误杀或误导流。


那我现在该升级吗?

看情况!分两种:

推荐升级的情况:

  • 新项目:直接上 Spring Boot 3.x + Java 17!
  • 想玩原生镜像:追求极致性能和启动速度。
  • 云原生项目:用 K8s、微服务架构。

暂缓升级的情况:

  • 还在用 Java 8:必须先升级 JDK。
  • 依赖老旧库:比如某些中间件 SDK 还不支持 jakarta。
  • 项目稳定,无大改动:可以等下次大版本迭代时再升级。

总结对比表

特性

Spring Boot 2.x

Spring Boot 3.x

最低 Java 版本

Java 8

Java 17

包名

javax.*

jakarta.*

原生镜像

不支持

原生支持

Spring Security

继承 WebSecurityConfigurerAdapter

使用 DSL 配置

云原生支持

/health

/liveness, /readiness

未来支持

逐渐停止

主推版本


最后一句话

SpringBoot3.x不是可选项,而是Java 开发现代化的必经之路

早点了解,早点准备,别等到公司要求升级时,你还在问“javax和jakarta有啥区别?”

另外SpringBoot4.x很快就发布正式版了,可以关注一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值