注:
- Oracle 提供的免费实验室环境中提供了本教程。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室后,请使用特定于您的云环境的这些值替换这些值。
TASK 5:构建 Micronaut 应用的本地映像并部署到 Oracle Cloud
在此实验室中,您将了解如何使用 GraalVM Native Image 将 Java 应用转换为原生 Linux 可执行文件。之后,将其部署到 Oracle Cloud 中的虚拟机。
估计时间:20 分钟
任务内容
在本任务中,您将执行以下操作:
- 在 Oracle Cloud 中的 JVM 上运行 Micronaut 应用程序
- 构建 Micronaut 应用的原生 Linux 可执行文件
- 将 Micronaut 应用部署为 Oracle Cloud 中的原生可执行文件
- 配置防火墙以允许流量流入云实例(可选)
步骤 1:在 Oracle Cloud 中的 JVM 上运行 Micronaut 应用程序
在此步骤中,您将传统上在 Oracle Cloud 中的 JVM(从 JAR 文件)上部署 Micronaut 应用程序。您将继续使用 VS 代码,其中 GraalVM Enterprise 22.0.0 设置为默认 JDK。
-
依次转到 Terminal 和 New Terminal(新建终端),然后运行以下命令来验证 Java 版本:

java -version每次调用
java命令时,将应用在 GraalVM Enterprise 中默认启用的优化 Graal JIT 编译器。 -
您可以将 Java 项目打包到可运行的 JAR 文件中,然后从 VS 代码终端或调用 Run Main 操作启动应用程序。
-
依次转到终端、新建终端并运行
mn:run目标:
./mvnw mn:run如果使用 Gradle,请执行
run任务:
./gradlew run -
或者,在 VS Code 中找到
Application.java类文件,单击 main 方法上方的 Run Main:
应用程序在端口 8080 上启动。请注意启动它所花费的时间(预计以 ~6500 毫秒开始)。
-
-
终止应用程序:

CTLR +C
步骤 2:构建 Micronaut 应用程序的本地 Linux 可执行文件
您可以使用 GraalVM Native Image 将任何 Java 应用转换为原生可执行文件。它是一种提前期的编译技术,允许您将 Java 字节码转变为不需要 JDK 运行且设计为在特定目标环境中执行且自包含的本机二进制文件。
如前所述,为了方便用户使用,您的虚拟机上预安装了 GraalVM Enterprise 22。本机映像与所有从属库(例如 libstdc++-static、glibc、zlib 等)一起添加。native-image 实用程序放置在 GraalVM 安装目录 ($JAVA_HOME/bin) 中。
-
在 VS Code Terminal(VS 代码终端)窗口中,验证 Native Image 版本:

native-image --version -
运行以下单个命令以构建本机 Linux 可执行文件:
- 如果使用的是 Maven,请指定
native-image打包格式:

./mvnw clean package -Dpackaging=native-image- 如果使用 Gradle,请执行
nativeImage任务:

./gradlew nativeCompile经过一段时间后,称为
ocidemo的本机可执行文件将内置到/target/native-image/目录中。如果使用 Gradle,则名为ocidemo的可执行文件将写入/build/native/nativeCompile/文件夹。注意:生成可执行文件所需的时间取决于应用程序大小和复杂性,可能需要花费一些时间来运行低功率的 VM。使用为此实验分配的 VM 实例的容量,预计时间约为 5 分钟。
- 如果使用的是 Maven,请指定
GraalVM Native Image 将创建一个可执行文件,其中包含所有应用程序类、从属库类、从属 JDK 类和应用程序堆的快照。虽然构建原生映像可能需要一些时间,但其优势包括启动时间大幅缩短和整体内存使用量降低。
第 3 步:在 OCI 中部署 Micronaut 应用
在上一步中,您创建了 Micronaut 应用程序的本机 Linux 可执行文件。现在,您将在 Oracle Cloud 中部署此原生可执行文件,并在从 JAR 文件和本地映像运行同一应用程序时比较启动时间。
要将应用程序部署为本地可执行文件,请调用在上一步中生成的二进制文件:
- 如果您使用的是 Maven:
![]()
./target/ocidemo
- 如果使用 Gradle:
![]()
./build/native/nativeCompile/ocidemo
请注意,从步骤 1 中的 JAR 文件启动此 Micronaut 微服务作为本机映像需要比从 ~6500 毫秒跳至 2500 倍快得多。它的启动速度更快,因为可执行文件是自包含的二进制文件,不需要 JDK 运行,因此可以轻松地分发应用。文件大小也相当小。
将 Java 微服务部署为原生可执行文件有助于实现即时启动、降低 CPU 和内存使用量,使 GraalVM 企业版成为构建云原生 Java 应用和云部署的理想人选。
此时应用程序运行成功,但是要访问它(例如,从浏览器访问),您需要允许传入到虚拟机的流量。终止应用程序 CTRL+C,然后继续执行下一步。
步骤 4:配置防火墙以允许流量流入云实例(可选)
要验证此服务器端应用程序是否在 Oracle Cloud 中运行并在浏览器中打开,您需要确保主机防火墙允许流量流入虚拟机。
-
返回到云控制台,依次导航到计算和实例。
-
登录到 OCI 控制台后,导航到计算并单击实例。确保您处于必要的区间(请参见任务 1、步骤 3)。

-
在主视图中查找 VM 实例(以 graal-workshop-... 开头的名称),然后将其打开。
-
在主要 VNIC 部分中,单击实例所附加到的子网 (subnet-01)。
-
在子网页上,单击内部安全列表。
-
按添加入站规则并填写以下数据。

该规则允许来自所有源的通信使用端口 8080,以便可以从任何位置访问应用程序。
-
返回终端窗口,然后运行以下命令重新启动正在运行的 VM 实例中的防火墙。

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld -
将应用程序作为本机可执行文件重新启动。
使用 Maven 构建:

./target/ocidemo使用 Gradle 构建:

./build/native/nativeCompile/ocidemo -
在浏览器中使用
http://<SERVER_IP>:8080/pets(适用于/pet端点)和http://<SERVER_IP>:8080/owners(适用于/owners端点)打开应用程序。或者,拆分 VS 代码中的终端窗口并使用curl发送 GET 请求:
curl -i http://<SERVER_IP>:8080/pets
祝贺您!您已成功完成此实验。
了解更多
-
可以使用 GraalVM Native Image 获得上机操作实验体验,并运行 GraalVM Native Image Quick Start 实验室来构建云原生 Java 应用。
-
Wacth 关于使用 Micronaut 和 GraalVM 构建多云无服务器应用的介绍视频。
要结束此会话,请单击工具栏中的“结束会话”按钮。