在我之前关于云原生 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 应用程序。
 
 
 
 
 
 
 

评论已关闭。