返回

从初学者到实践者:Spring Boot 3.2、JDK 21 与 GraalVM 入门指南

后端

从 Spring Boot 3.2 到 GraalVM:构建高性能 Java 应用程序

准备就绪,拥抱未来

随着 Spring Boot 2.x 维护的结束,是时候踏入 Spring Boot 3.2 的时代了。同时,JDK 21 已成为 Java 的最新版本,而 GraalVM 则以其优异的性能和云原生支持脱颖而出。

初学者到实战者的进阶指南

本文将循序渐进地指导你,从零开始构建高性能 Java 应用程序,使用 Spring Boot 3.2、JDK 21 和 GraalVM。无论你是初学者还是经验丰富的开发者,你都将从中受益匪浅。

搭建物料:构建 Spring Boot 项目

首先,使用 Spring Initializr 创建一个 Spring Boot 项目。在 Spring Initializr 网站上,选择项目类型,然后单击“生成”。将项目导入你的 IDE,我们使用的是 IntelliJ IDEA。

集成 GraalVM:提升性能

步骤 1:创建一个 Native Image 目录

在项目根目录下创建一个名为 native-image 的目录。

步骤 2:创建 GraalVM 构建脚本

native-image 目录下创建 build.gradle 文件,并添加以下内容:

plugins {
    id 'org.graalvm.buildtools.native' version '0.9.11'
}

nativeBuild {
    mainClass = 'com.example.demo.DemoApplication'
    graalVmOptions = [
        '--no-server',
        '--no-fallback'
    ]
}

步骤 3:启用 Spring Native

在项目根目录下创建 application.properties 文件,并添加以下内容:

spring.native.enable=true

构建并运行 GraalVM Native Image

在终端中,转到 native-image 目录并运行:

./gradlew nativeImage

生成可执行文件 demo 后,运行:

./demo

性能测试:衡量改进

步骤 1:添加 JMH 依赖项

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.35</version>
</dependency>

步骤 2:创建基准测试类

import org.openjdk.jmh.annotations.*;

public class MyBenchmark {

    @Benchmark
    public void testMethod() {
        // 基准测试代码
    }

}

步骤 3:运行基准测试

./gradlew jmh

通过 JMH 结果,你可以比较 GraalVM Native Image 与 JVM 的性能。

总结:展望未来

本文全面介绍了如何使用 Spring Boot 3.2、JDK 21 和 GraalVM 构建高性能 Java 应用程序。我们讲解了 GraalVM 的集成、性能测试,并通过代码示例逐一演示。

拥抱这些技术,踏上 Java 开发的新旅程,构建性能卓越、面向未来的应用程序。

常见问题解答

问:为什么要从 Spring Boot 2.x 迁移到 3.2?
答:Spring Boot 3.2 提供了新的特性和改进,例如对 Java 19 的支持、Reactive Streams 5 和 Jakarta EE 9 的集成。

问:如何验证 GraalVM 是否已成功集成?
答:运行 GraalVM Native Image 生成的可执行文件,查看控制台输出中是否包含 "Built with GraalVM" 消息。

问:JMH 是否只能用于基准测试 Java 代码?
答:不,JMH 也可以用于基准测试其他语言,例如 JavaScript 和 Python。

问:除了性能之外,GraalVM 还有什么优势?
答:GraalVM 还提供了对本机映像、多语言支持和云原生功能的增强。

问:对于初学者来说,推荐哪种 IDE 用于此项目?
答:对于初学者来说,IntelliJ IDEA 和 Eclipse 是推荐的 IDE,它们提供了丰富的 Java 开发工具和对 Spring Boot 和 GraalVM 的支持。