在我之前关于云原生 Java 应用程序的系列文章中,我分享了 云原生软件的 6 个要求 和 云原生 Java 必须提供的 4 件事。但现在您可能希望在本地机器上实现这些高级 Java 应用程序,而无需陡峭的学习曲线。在本文中,我将介绍如何使用开源技术 Quarkus 和 Visual Studio Code (VS Code) 来加速传统云原生 Java 堆栈以及无服务器、反应式应用程序的开发,并采用更简单、更熟悉的方法。
Quarkus 是一个 Kubernetes 原生 Java 堆栈,专为 GraalVM 和 OpenJDK HotSpot 量身定制。它由一流的 Java 库和标准打造,具有实时编码、统一配置、超快启动、小内存占用以及统一的命令式和反应式开发。VS Code 是一个用于编辑代码的开源集成开发环境 (IDE)。
生成 Quarkus 项目
首先导航到 Quarkus 的 开始编码 页面,以生成包含 RESTful 端点的 Quarkus 项目。将所有变量(即 Group、Artifact、Build Tool、Extensions)保留为默认设置,然后单击页面右上角的生成您的应用程序。请注意,RESTEasy JAX-RS 扩展已预先选择为默认值。

ZIP 文件将自动下载到您的本地机器上。使用以下命令解压文件
$ unzip code-with-quarkus.zip
Archive: code-with-quarkus.zip
creating: code-with-quarkus/
inflating: code-with-quarkus/pom.xml
...
安装 VS Code
以您喜欢的方式下载并安装 VS Code,无论是从网站下载 还是通过您的软件包管理器(dnf、apt、brew 等)。完成后,使用 VS Code 的命令行工具打开解压后的 Quarkus 项目
$ cd code-with-quarkus/
$ code .
您将看到 Apache Maven 项目结构,其中包含
- 在 /hello 上公开的 ExampleResource
- 关联的 JUnit 测试
- 可通过 https://#:8080 访问的着陆页
- 用于 本地编译 和 JVM HotSpot 的 Dockerfile
- 统一的应用程序配置文件
通过 VS Code 的扩展功能将 Quarkus 工具添加到您的 IDE。

开始编码
使用 Quarkus 开发模式运行应用程序。要运行应用程序,您需要
- 安装 JDK 1.8+ 并正确配置 JAVA_HOME
- Apache Maven 3.6.3+
移动到 code-with-quarkus 目录,然后在 VS Code 的终端中键入 mvn compile quarkus:dev。

您将看到 Java 应用程序运行良好,具有
- 大约一秒钟启动
- 实时编码已激活
- 启用 CDI 和 RESTEASY 功能
当您通过 Web 浏览器访问端点时,您将看到返回代码 hello。

现在,您已准备好更改代码!返回 VS Code,然后打开 src/main/java/org/acme 中的 ExampleResource.java 文件。将返回代码替换为“Welcome, Cloud-Native Java with Quarkus!”。不要忘记保存文件。

返回 Web 浏览器并重新加载页面。

这就像魔法一样! 在幕后,Quarkus 为您自动重建、打包和部署了应用程序,并且只花了半秒钟。这是提高开发效率的基本云原生 Java 运行时功能之一。

继续在 Quarkus 中运行您的云原生 Java 应用程序。
通过 Quakrus Tool 集成数据事务
要添加内存数据库 (H2) 事务功能,请按 F1,然后单击 Quarkus: Add extensions to the current project。

在搜索栏中输入 h2,然后在结果中双击 JDBC Driver - H2 Data。

选择以下三个扩展,这将简化您的持久性代码并返回 JSON 格式的数据
- Hibernate ORM with Panache Data
- JDBC Driver - H2
- RESTEasy JSON-B Web
按 Enter 添加这些依赖项。

您应该在新的 VS Code 终端中看到以下内容

您还应该在 POM.xml 中找到以下拉取的依赖项

创建 Inventory 实体
项目就位后,您可以开始定义业务逻辑。
第一步是定义 Inventory 对象的模型(实体)。由于 Quarkus 使用 Hibernate ORM Panache,因此在 src.main.java.org.acme 目录中创建一个 Inventory.java 文件,并将以下代码粘贴到其中
package org.acme;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
@Entity
@Cacheable
public class Inventory extends PanacheEntity {
public String itemId;
public String location;
public int quantity;
public String link
public Inventory() {
}
}
定义 Inventory 的 RESTful 端点
接下来,镜像服务的抽象,以便将来您可以将 Inventory 服务注入到各个位置(如 RESTful 资源端点)。在 src.main.java.org.acme 目录中创建一个 InventoryResource.java 文件,并将以下代码添加到其中
package org.acme;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/services/inventory")
@ApplicationScoped
@Produces("application/json")
@Consumes("application/json")
public class InventoryResource {
@GET
https://#:8080/services/inventory
public List<Inventory> getAll() {
return Inventory.listAll();
}
}
不要忘记保存这些文件。返回您的 Web 浏览器并访问新端点 https://#:8080/services/inventory。您将看到

总结
如果您在实施过程中遇到问题或错误,您可以在我的 GitHub 存储库中的代码中找到并重用。
如果您想了解更多信息,Quarkus 提供了一些 实用且有用的指南,展示了如何使用 Quarkus 扩展以及事件驱动编程、无服务器开发和 Kubernetes 部署来开发高级云原生 Java 应用程序。
评论已关闭。