升级SpringBoot2.x(jdk1.8)到SpringBoot3.x(jdk21)

版本

  • SpringBoot 3.2.5
  • jdk21

前言

javax

Servlet、JPA 等从 javax 迁移到 jakarta 命名空间。

spring

@PathVariable必须指定参数名

  @PathVariable Long projectCode  错误
  @PathVariable(value ="projectCode" ) Long projectCode 正确

mybatis plus

升级 Mybatis-Plus 版本为 3.5.5 版本,需要注意下 Maven 的坐标标识是mybatis-plus-spring-boot3-starter,这点和SpringBoot 2 的依赖坐标mybatis-plus-boot-starter有所区别。

hibernate-validator

类不存在

升级过程

【升级】springboot升级为3.2.5

截止到2024-05-14最稳定版本为3.2.5 故选择该版本

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.5</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

【改造】javax.annotation-api->jakarta.annotation-api

spring6开始 Servlet、JPA 等从 javax 迁移到 jakarta 命名空间。

Jakarta EE 和 javax 是 Java 企业版规范的发展,以前称为 Java EE(Java Platform, Enterprise Edition)和 J2EE(Java 2 Platform, Enterprise Edition)。Jakarta EE 实际上是 Java EE 在 Eclipse 基金会的管理下的新品牌和继续发展,这是在甲骨文将 Java EE 转让给它们之后的情况。由于 “Java” 名称的商标问题,这种改变需要重新命名,“Java” 名称仍由 Oracle 拥有 (Baeldung)。

这一转变中最显著的变化之一是命名空间从 javax.* 切换到 jakarta.*。这一变化从 Jakarta EE 9 开始正式实施,对开发者来说是一个重大转变,因为所有以前的 javax 命名空间下的规范和应用程序都需要过渡到 jakarta (Jakarta EE)。例如,以前的 javax.servlet 现在变为 jakarta.servlet。这种重命名影响到 Java 企业开发的所有方面,从应用服务器到构建工具和框架,这些都已更新以适应新的命名空间 (JetBrains)。

从 javax 到 jakarta 的过渡还涉及更新项目依赖,这可能因库名称和版本的变化而复杂。工具如 Eclipse Transformer 可以帮助迁移应用程序,通过转换现有的 javax 类和包到 jakarta (DZone) (JetBrains)。

总体而言,向 Jakarta EE 的过渡代表了向开放、社区驱动的过程的广泛转变,用于发展企业 Java 规范,提供一个平台,继续支持在现代、分布式计算环境中的大规模服务器端应用 (The Enterprisers Project)。

  1. 添加 jakarta.servlet 依赖
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.0</version>
</dependency>
  1. 修改项目内所有代码的导入依赖
//修改前:
import javax.servlet.*
//修改后:
import jakarta.servlet.*

【异常】java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tree.JCTree qualid’

lombok版本兼容性的问题
Maven依赖更新新版 lombok 为 1.18.30以上 即可

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.30</version>
  <scope>provided</scope>
</dependency>

【异常】java: 无法访问javax.validation.ConstraintValidator

找不到javax.validation.ConstraintValidator的类文件

修改hibernate-validator版本为8.0.1.Final

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>

【异常】Exception in thread “main” java.lang.AbstractMethodError: Receiver class org.springframework.boot.logging.logback.RootLogLevelConfigurator does not define or inherit an implementation of the resolved method ‘abstract void configure(ch.qos.logback.classic.LoggerContext)’ of interface ch.qos.logback.classic.spi.Configurator.

logback版本导致,修改为下面版本

<dependency>
    <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.13</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12
关于 Spring AI 是否兼容 JDK 1.8 和 Spring Boot 2.7.x 的问题,目前官方文档并未直接提及具体的兼容性细节。然而,可以从以下几个方面推断其可能性。 ### 关于 JDK 1.8 兼容性 Spring Framework 自 5.3 版本起已停止支持 Java 8,并转向更高版本的支持策略[^3]。尽管如此,部分社区维护的功能可能仍保留有限的向下兼容能力。如果计划使用 JDK 1.8,则需特别关注 Spring AI 所依赖的基础组件及其最低 JDK 要求。 ### 针对 Spring Boot 2.7.x 的适配情况 Spring Boot 2.7 是基于 Spring Framework 5.3 构建的一个长期支持 (LTS) 版本系列。理论上讲,只要 Spring AI 不强制依赖更新版次的 Spring 框架功能集,那么它应当能够运行在 Spring Boot 2.7.x 上面。不过需要注意的是,随着新特性的不断加入以及旧有 API 的逐步淘汰,某些高级特性或许无法正常工作[^1]。 另外值得注意的一点在于微服务架构领域内的发展动态——正如提到过的那样,“Spring Cloud”项目已经经历了由传统字母序列命名方式向年度编号体系过渡的过程;这表明整个生态系统正在经历快速演进阶段,在此期间保持软件栈各组成部分之间良好同步变得尤为重要[^2]。 最后提醒一点有关技术支持渠道的信息:当遇到具体实现上的疑问或是排查错误时,可以考虑利用 Stack Overflow 平台寻求帮助,那里聚集了大量的开发者群体分享经验教训;而对于确认属于框架本身缺陷的情况,则应该提交至 GitHub Issues 进行跟踪处理。 ```java // Example Code Snippet for checking java version at runtime. public class JavaVersionCheck { public static void main(String[] args){ String javaVersion = System.getProperty("java.version"); if(javaVersion.startsWith("1.8")){ System.out.println("Running on JDK 1.8."); }else{ System.out.println("Not running on JDK 1.8 but "+javaVersion); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值