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

 更新时间:2026年02月12日 09:16:35   作者:程序员大华  
Spring Boot 3与Spring Boot 2之间存在多个方面的显著区别,这些区别主要体现在Java版本依赖、模块化支持、Web框架、技术栈和依赖项更新、功能增强和改进等方面,这篇文章主要介绍了SpringBoot 2.x和3.x核心区别的相关资料,需要的朋友可以参考下

前言

大家好,我是大华!有很多朋友不知道Springboot2.x和3.x有什么区别,用着感觉都差不多。其实3.x是一个重大版本升级。

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

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

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

1. 包名的更新:javax→jakarta

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

Spring Boot 2.x(老代码)

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(新代码)

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 配置方式

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

注意:WebSecurityConfigurerAdapterSpring Security 6已被废弃

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

@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 中加入插件:

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

然后运行:

./mvnw -Pnative native:compile

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

运行它:

./myapp

你会发现:

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

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

4. 云原生支持:Liveness 和 Readiness

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

配置application.yml

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.xSpring Boot 3.x
最低 Java 版本Java 8Java 17
包名javax.*jakarta.*
原生镜像不支持原生支持
Spring Security继承 WebSecurityConfigurerAdapter使用 DSL 配置
云原生支持/health/liveness, /readiness
未来支持逐渐停止主推版本

最后一句话

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

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

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

到此这篇关于SpringBoot 2.x和3.x核心区别的文章就介绍到这了,更多相关SpringBoot2.x和3.x核心区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 2个java希尔排序示例

    2个java希尔排序示例

    java希尔排序示例,希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法,需要的朋友可以参考下
    2014-05-05
  • Java使用Sa-Token框架完成踢人下线功能

    Java使用Sa-Token框架完成踢人下线功能

    踢人下线是一个很常见的需求,本文主要介绍了Java使用Sa-Token框架完成踢人下线功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • java时间和字符串之间相互转换几种方法

    java时间和字符串之间相互转换几种方法

    这篇文章主要介绍了java时间和字符串之间相互转换的几种方法,还详细解释了DateTimeFormatter的三种解析模式,并比较了yyyy和uuuu在严格模式下的区别,需要的朋友可以参考下
    2025-03-03
  • 基于springboot 配置文件context-path的坑

    基于springboot 配置文件context-path的坑

    这篇文章主要介绍了基于springboot 配置文件context-path的坑,基于很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java 深入理解创建型设计模式之原型模式

    Java 深入理解创建型设计模式之原型模式

    原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节
    2022-02-02
  • SpringBoot Security前后端分离登录验证的实现

    SpringBoot Security前后端分离登录验证的实现

    这篇文章主要介绍了SpringBoot Security前后端分离登录验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • elasticsearch源码分析index action实现方式

    elasticsearch源码分析index action实现方式

    这篇文章主要为大家介绍了elasticsearch源码分析index action实现方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • spring security在分布式项目下的配置方法(案例详解)

    spring security在分布式项目下的配置方法(案例详解)

    这篇文章主要介绍了spring security在分布式项目下的配置方法,本文通过一个项目案例给大家详细介绍,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 简单了解JAVA SimpleDateFormat yyyy和YYYY的区别

    简单了解JAVA SimpleDateFormat yyyy和YYYY的区别

    这篇文章主要介绍了简单了解JAVA SimpleDateFormat yyyy和YYYY的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java Bean转Map的那些踩坑实战

    Java Bean转Map的那些踩坑实战

    项目中有时会遇到Map转Bean,Bean转Map的情况,下面这篇文章主要给大家介绍了关于Java Bean转Map那些踩坑的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论