为什么 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很快就发布正式版了,可以关注一下。

被折叠的 条评论
为什么被折叠?



