升级程序到Java21的记录二(修改程序源代码)

文章讲述了如何将一个使用SpringBoot2.6.8和JDK17的项目升级到SpringBoot3.0并支持Java21,涉及Gradle版本升级、Lombok修复、SpringBoot3.2.2版本迁移、依赖包更新及build.gradle配置的调整,确保代码兼容性和虚拟线程的启用。
摘要由CSDN通过智能技术生成

背景

:参看 《升级程序到Java21的记录一(先升级jdk到21)》, Jdk升级完毕,下面我们该修改程序源代码了, 程序最初使用的springboot 2.6.8 以及jdk17。为了使用springboot 3.0(3.0开始有支持虚拟线程的相关配置)和java21相关语法,源代码需要一定改动, 本文记录源代码的相关改动。

具体改动

1,升级工程的gradle

笔者的程序使用gradle做构建,为了支持java21,需要升级gradle版本。

在工程根目录下执行gradle wrapper --gradle-version=8.5, 升级到gradle 8.5, 该版本支持java21
在这里插入图片描述

2, 升级lombok版本

参看 https://stackoverflow.com/questions/77171270/compilation-error-after-upgrading-to-jdk-21-nosuchfielderror-jcimport-does-n

升级gradle到8.5 后执行gradle bootJar发现报错

Execution failed for task ':compileJava'.
> java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

* Try:

在这里插入图片描述
升级到对应版本lombok
在这里插入图片描述

3,升级springboot版本

从springboot 2.7.18 开始支持java21, 笔者程序使用的springboot 2.6.8,直接构建为java21的报错如下。
命令:gradle bootJar --stacktrace
在这里插入图片描述

具体springboot升级改动的内容参看官方文档:
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-gradle-plugin/3.2.0
https://docs.spring.io/spring-boot/docs/2.7.x/reference/html/getting-started.html

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide 重点是这个。 升级后一些对应的http 参数校验也发生变化, 例如之前的@NotEmpty对query parameter不生效,现在开始生效了,

之前的springboot版本信息:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:2.6.8"
    classpath "io.spring.gradle:dependency-management-plugin:1.0.11.RELEASE"
    classpath "com.netflix.nebula:gradle-lint-plugin:17.7.1"
  }
}

升级后的springboot版信息。 笔者直接升级到当时的springboot3的最新版本 3.2.2

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-gradle-plugin/3.2.2
    classpath "org.springframework.boot:spring-boot-gradle-plugin:3.2.2"
    // https://mvnrepository.com/artifact/io.spring.dependency-management/io.spring.dependency-management.gradle.plugin
    classpath 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.4'
    classpath "com.netflix.nebula:gradle-lint-plugin:17.7.1"
  }
}

4,升级一些依赖包

单测依赖的com.github.javafaker:javafaker升级后报错了,直接禁用javafaker包,使用同等功能的 ‘net.datafaker:datafaker:1.5.0’

单测报错,需要升级 junit的版本

https://stackoverflow.com/questions/60471228/junit-java-lang-nosuchmethoderror-org-junit-jupiter-api-extension-extensioncont
在这里插入图片描述
在这里插入图片描述

升级后yaml解析有报错,添加了对应 testImplementation ‘org.yaml:snakeyaml:2.0’
在这里插入图片描述

5,修改build.gradle

增加编译为java21的配置
在这里插入图片描述

  java {
    sourceCompatibility = JavaVersion.VERSION_21
    targetCompatibility = JavaVersion.VERSION_21
  }

到此,源代码对应的改动结束,如果你使用preview功能,需要在build.gradle中增加如下功能

  tasks.withType(JavaCompile) {
    options.compilerArgs += "--enable-preview"
  }

  tasks.withType(Test) {
    jvmArgs += "--enable-preview"
  }

  tasks.withType(JavaExec) {
    jvmArgs += "--enable-preview"
  }

使用gradle bootJar构建,检查生成的class文件,可以发现已经是java21对应版本,可以修改配置文件开启的虚拟线程, 并在程序启动检查日志
在这里插入图片描述

6,检查日志

启动程序,发现已经使用虚拟线程。 可以使用自己的业务性能基准测试验证性能的提升。
在这里插入图片描述

学生管理系统是一个可以帮助学校、教育机构或者培训机构进行学生信息管理和统计的系统。其中使用Java作为编程语言,SQL Server作为数据库管理系统。系统的源代码主要包括以下几个模块: 1. 学生信息管理模块:包括学生基本信息的录入、修改和删除功能,如学号、姓名、性别、年龄、联系方式等信息的管理。 2. 学生成绩管理模块:可以记录学生的考试成绩,包括课程名称、成绩、考试日期等信息,可以对成绩进行查询、统计和分析。 3. 学生缴费管理模块:记录学生的学费缴纳情况,包括缴费日期、费用金额、缴费方式等信息,还可以统计学生的欠费情况。 4. 学生活动管理模块:记录学生参加的各种活动情况,包括活动名称、参加日期、参与成绩等信息。 在Java中,可以使用面向对象的方法进行系统设计和编码,利用类、继承、多态等特性对学生、成绩、缴费、活动等业务对象进行抽象和模型化。同时,需要使用SQL Server建立学生信息、成绩、缴费、活动等数据表,通过Java程序与数据库进行连接、交互和操作。 在编写源代码时,需要充分考虑系统的稳定性、安全性和性能,编写良好的注释和文档,方便系统维护和升级。另外,还需要在系统中添加权限管理功能,保障学生信息的安全性。 总之,通过Java和SQL Server实现学生管理系统源代码,可以帮助学校和机构更加便捷和高效地管理学生信息,提高教学和管理水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值