当前位置:Java -> 释放Oracle NoSQL与Quarkus的力量:云时代应用的无缝集成

释放Oracle NoSQL与Quarkus的力量:云时代应用的无缝集成

在当今数字化的风景中,对能够无缝集成现代应用程序框架且具有可伸缩性和高性能的数据库的需求是不断增长的。虽然可靠的传统关系型数据库通常需要帮助以跟上云原生应用程序的动态需求。这导致了NoSQL数据库的兴起,为现代应用程序的需求提供了灵活性、可伸缩性和性能。本文深入探讨了Oracle NoSQL和Quarkus之间的协同作用,探索它们的集成如何有效地赋能Java开发人员构建强大的云原生应用程序。

Oracle NoSQL是一个设计用于实时、低延迟数据处理的分布式键值数据库。它提供了灵活的数据模型,允许开发人员存储和检索数据而不受固定架构的限制。利用分布式架构,Oracle NoSQL确保高可用性、容错性和水平可扩展性,使其非常适合在云环境中处理大量数据。通过自动分片、复制和可调整一致性级别等功能,Oracle NoSQL提供了现代应用程序所需的性能和可靠性,适用于各行各业。

Quarkus是一个专为GraalVM和OpenJDK HotSpot优化的Kubernetes本机Java框架,具有快速启动时间和低内存占用。它秉承云原生开发的原则,与流行的容器化平台和微服务架构无缝集成。Quarkus通过其全面的扩展生态系统提升开发人员的生产力,使开发人员能够以无与伦比的效率构建、测试并部署Java应用程序。借助其响应式编程模型、对命令式和响应式样式的支持,以及与流行Java库的无缝集成,Quarkus赋予开发人员创建轻量、可扩展和弹性应用程序的能力,适应云时代的需求。

为何选择Oracle NoSQL和Quarkus

将Oracle NoSQL与Quarkus集成结合了两者的优势,为Java开发人员提供了一个强大的平台,用于构建云原生应用程序。以下是它们无缝契合的原因:

性能和可伸缩性

Oracle NoSQL的分布式架构和Quarkus的优化运行时结合在一起,提供卓越的性能和可伸缩性。开发人员可以扩展其应用程序以处理不断增长的工作负载,同时保持低延迟的响应时间。

开发人员生产力

Quarkus的开发人员友好功能,如实时编码、自动热部署和简化的依赖管理,与Oracle NoSQL的易用性相辅相成,使开发人员能够专注于构建创新功能而不是处理基础架构的复杂性。

云原生集成

Oracle NoSQL和Quarkus均设计用于云原生环境,使它们与现代部署实践(如容器化、编排和无服务器计算)天然兼容。这种兼容性确保了与AWS、Azure和Google Cloud等流行云平台的无缝集成。

响应式编程

Quarkus对响应式编程的支持与Oracle NoSQL应用程序的实时、事件驱动特性相吻合。开发人员可以利用响应式范例构建高度响应、弹性的应用程序,轻松处理异步数据流和复杂事件处理。

总之,将Oracle NoSQL与Quarkus集成为Java开发人员在云时代构建高性能、可伸缩的应用程序提供了一个引人注目的解决方案。通过利用两者的优势,开发人员能够在数据管理、应用程序性能和开发人员生产力等方面开启新的可能性,最终推动数字时代的创新和价值创造。

执行数据库:启动Oracle NoSQL数据库

在深入编码之前,我们必须确保Oracle NoSQL实例正在运行。使用Docker可以方便地在容器中运行Oracle NoSQL以进行本地开发。以下是您可以使用Docker启动Oracle NoSQL实例的方法:

docker run -d --name oracle-instance -p 8080:8080 ghcr.io/oracle/nosql:latest-ce


此命令将从GitHub容器注册表(ghcr.io)拉取最新的Oracle NoSQL社区版,并将其作为名为“oracle-instance”的Docker容器在端口8080上启动。

使用Quarkus生成代码结构

Quarkus通过其直观的用户界面简化了生成代码的过程。按照以下步骤为您的Quarkus项目生成代码结构:

  1. 在您的网络浏览器中打开Quarkus代码生成工具
  2. 根据需要配置项目依赖项、扩展和其他设置。
  3. 单击“生成您的应用程序”按钮,将生成的项目结构作为zip文件下载。

配置MicroProfile Config属性

生成Quarkus项目后,您必须配置MicroProfile Config属性以连接至Oracle NoSQL数据库。修改您项目的src/main/resources目录中的microprofile-config.properties文件,包括数据库配置并更改端口以避免冲突:

# Configure Oracle NoSQL Database
jnosql.keyvalue.database=olympus
jnosql.document.database=olympus
jnosql.oracle.nosql.host=http://localhost:8080

# Change server port to avoid conflict
server.port=8181


在此配置中:

  • jnosql.keyvalue.databasejnosql.document.database分别指定键值存储和文档存储的数据库名称。
  • jnosql.oracle.nosql.host指定与本地运行在端口8080上的Oracle NoSQL数据库实例连接的主机URL。
  • server.port将Quarkus服务器端口更改为8181,以避免与端口8080上的Oracle NoSQL数据库发生冲突。

有了这些配置,您的Quarkus应用程序将准备就绪,可以无缝连接到Oracle NoSQL数据库实例。现在,您可以开发应用程序逻辑,利用Quarkus和Oracle NoSQL的强大功能,构建健壮的云原生解决方案。

我们需要适当配置依赖项,以将Eclipse JNoSQL与Oracle NoSQL驱动集成到我们的Quarkus项目中。由于Quarkus避免使用反射解决方案,我们将利用Eclipse JNoSQL的lite版本,该版本允许我们在运行时生成必要的源代码而无需反射引擎。以下是如何在pom.xml文件中配置依赖项:

<dependency>
    <groupId>org.eclipse.jnosql.databases</groupId>
    <artifactId>jnosql-oracle-nosql</artifactId>
    <version>${jnosql.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.jnosql.mapping</groupId>
            <artifactId>jnosql-mapping-reflection</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.eclipse.jnosql.lite</groupId>
    <artifactId>mapping-lite-processor</artifactId>
    <version>${jnosql.version}</version>
    <scope>provided</scope>
</dependency>


在这个配置中:

  • <dependency>groupIdorg.eclipse.jnosql.databasesartifactIdjnosql-oracle-nosql,包括Eclipse JNoSQL的Oracle NoSQL驱动。
  • 在这个依赖项内部,我们有一个<exclusions>块来排除jnosql-mapping-reflection artifact。这是为了确保反射引擎不包含在我们的项目中,因为Quarkus不使用反射解决方案。
  • <dependency>groupIdorg.eclipse.jnosql.liteartifactIdmapping-lite-processor,包括JNoSQL映射处理程序的lite版本。
  • 我们将<scope>指定为provided,表示lite处理程序在编译期间提供,用于生成必要的源代码,但不包含在应用程序的运行时依赖项中。

通过配置这些依赖项,Eclipse JNoSQL将无缝集成到您的Quarkus项目中,让您可以利用Oracle NoSQL的强大功能,同时遵循Quarkus避免使用反射解决方案的原则。

要了解更多关于Eclipse JNoSQL Lite的信息,请访问Eclipse JNoSQL GitHub存储库

我们需要对实体和资源库从Java SEHelidon迁移到Quarkus项目进行一些调整。以下是用于您的Beer实体、BeerRepositoryBeerResource类的修改后代码:

Beer实体

@Entity
public class Beer {

    @Id
    public String id;

    @Column
    public String style;

    @Column
    public String hop;

    @Column
    public String malt;

    @Column
    public List<String> comments;

    // Public getters and setters are explicitly included for JNoSQL access
 }


从Helidon迁移到Quarkus需要将我们的资源库适应符合Quarkus标准。在Quarkus中,资源库可以扩展BasicRepository接口,简化数据库交互为基本操作。


@Repository
public interface BeerRepository extends BasicRepository<Beer, String> {
}


我们的RESTful资源BeerResource进行了最小修改,以符合Quarkus的约定。以下是注解和更改的详细说明:

  • @Path("/beers"):建立与啤酒相关端点的基本路径
  • @RequestScoped:指定资源实例的范围为单个HTTP请求,确保隔离
  • @Produces(MediaType.APPLICATION_JSON):表示生产JSON相应
  • @Consumes(MediaType.APPLICATION_JSON):指示消费JSON请求
  • @Inject::简化BeerRepository的依赖注入,消除手动实例化
  • @Database(DatabaseType.DOCUMENT):限定JNoSQL交互的数据库类型,指定Oracle NoSQL的面向文档的特性;限定符在具有多个接口实现的情况下至关重要,以确保精确的依赖项解析。
@Path("/beers")
@RequestScoped
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BeerResource {

    @Inject
    @Database(DatabaseType.DOCUMENT)
    BeerRepository beerRepository;

    @GET
    public List<Beer> getBeers() {
        return beerRepository.findAll();
    }

    @GET
    @Path("{id}")
    public Beer getBeerById(@PathParam("id") String id) {
        return beerRepository.findById(id)
                .orElseThrow(() -> new WebApplicationException("Beer not found: " + id, Response.Status.NOT_FOUND));
    }

    @PUT
    public void insert(Beer beer) {
        beerRepository.save(beer);
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") String id) {
        beerRepository.deleteById(id);
    }
}


测试啤酒API

设置Quarkus项目并将Oracle NoSQL与JNoSQL集成后,重要的是彻底测试API端点,以确保它们按预期运行。以下是通过终端使用cURL命令执行和测试API的步骤:

步骤1:运行Quarkus项目

在终端中执行以下命令以在开发模式下启动Quarkus项目:

./mvnw compile quarkus:dev


这个命令编译项目并启动Quarkus开发服务器,使您可以更改代码并实时查看结果。

步骤2:使用cURL测试端点

您可以使用cURL,一个用于发出HTTP请求的命令行工具,与API端点进行交互。以下是测试每个端点的curl命令:

  1. 获取所有啤酒:
curl -X GET http://localhost:8181/beers


此命令从数据库中检索所有啤酒,并返回包含啤酒数据的JSON响应。

  1. 通过ID获取特定啤酒:
curl -X GET http://localhost:8181/beers/<beer_id>


使用实际的啤酒ID替换<beer_id>,可以从数据库中获取指定ID的啤酒。此命令用于从数据库中提取指定ID的啤酒。

  1. 插入新啤酒:
curl --location --request PUT 'http://localhost:8181/beers' \
--header 'Content-Type: application/json' \
--data '{"style":"IPA", "hop":"Cascade", "malt":"Pale Ale", "comments":["Great beer!", "Highly recommended."]}'


此命令将提供的详细信息(风格,啤酒花,麦芽,评论)插入到数据库中,创建新的啤酒。

  1. 通过ID删除啤酒:
curl -X DELETE http://localhost:8181/beers/<beer_id>


使用实际的啤酒ID替换<beer_id>,可以从数据库中删除指定ID的啤酒。此命令用于从数据库中删除指定ID的啤酒。

通过遵循这些步骤并执行提供的cURL命令,您可以有效地测试您的啤酒API端点的功能,并确保其与Oracle NoSQL数据库正确交互。

结论

在本文中,我们探讨了使用JNoSQL实现Oracle NoSQL与Quarkus的无缝集成,使开发人员能够在云时代构建健壮且可扩展的应用程序。我们首先理解了Oracle NoSQL和Quarkus的基本原理,并认识了它们在数据管理和云原生开发中的优势。

通过将Java SE和Helidon中的Beer实体和存储库迁移到Quarkus项目,我们展示了利用JNoSQL与Oracle NoSQL数据库交互的简单性。通过遵循Quarkus惯例和使用JNoSQL注解,我们确保了平稳的集成,并在迁移过程中保持了数据完整性。

此外,我们使用cURL命令测试了API端点,验证了我们的啤酒API的功能,并确认了它与Oracle NoSQL数据库的无缝交互。

对于希望深入了解实现细节并探索源代码的开发人员,以下参考提供了一个全面的源代码存储库:

通过利用Quarkus、JNoSQL和Oracle NoSQL的能力,开发人员可以轻松地解锁应用程序开发的新可能性,实现构建高性能的云原生解决方案。总之,将Oracle NoSQL与Quarkus集成,让开发人员拥抱云时代,提供创新且可扩展的应用程序,满足现代企业不断变化的需求。

推荐阅读: 13.为什么TCP连接的时候是3次,关闭的时候却是4次?

本文链接: 释放Oracle NoSQL与Quarkus的力量:云时代应用的无缝集成