NoSQL数据库已经成为现代应用开发的基石,提供了处理各种数据类型的可伸缩性和灵活性。然而,对于许多Java开发人员来说,与NoSQL数据库集成可能复杂且耗时。这就是Eclipse JNoSQL的用武之地,它提供了一种无缝且标准化的方式,将您的Java应用程序连接到各种NoSQL数据库。
本文探讨了Eclipse JNoSQL 1.1.3如何简化数据库集成、增强开发人员的生产力,并在不同数据库之间提供灵活性。我们还将通过使用Quarkus和ArangoDB进行实际示例演示其特点。
Java开发人员为什么应该关注Eclipse JNoSQL
对于许多开发人员来说,使用NoSQL数据库涉及学习特定于数据库的API,这可能导致碎片化、不可移植的代码。Eclipse JNoSQL通过提供以下内容消除了这些挑战:
- 易用性:使用直观的注解如
@Entity
、@Id
和@Column
,您可以在几秒钟内将Java对象映射到NoSQL集合。 - 灵活性:在不更改应用程序代码的情况下切换NoSQL数据库(例如Redis、MongoDB、ArangoDB、Oracle NoSQL)。
- 符合标准:实现了Jakarta Data和Jakarta NoSQL规范,确保了一种面向未来的、可移植的解决方案。
- 集成就绪:与Jakarta EE和MicroProfile组件无缝配合,利用CDI进行依赖注入和配置管理。
《Eclipse JNoSQL 1.1.3新特性》
Eclipse JNoSQL刚刚发布了1.1.3版本,为其已经强大的生态系统带来了新功能、错误修复和性能改进。这个版本是简化Java开发人员与NoSQL数据库交互的重要里程碑。在本文中,我们将探讨Eclipse JNoSQL的目标以及此版本引入的新功能,并提供一个实际示例,演示如何与Quarkus和ArangoDB一起使用它。
Eclipse JNoSQL旨在通过提供统一的API和架构来简化Java应用与NoSQL数据库的集成。通过遵循Jakarta EE规范,JNoSQL使开发人员可以轻松地与各种NoSQL数据库(无论是键-值、文档、图形还是列族数据库)无缝配合。
- 互操作性:该抽象层抽象了特定于数据库的复杂性,使在MongoDB、Redis、ArangoDB和Oracle NoSQL等数据库之间切换变得容易。
- 规范驱动:实现了Jakarta Data和Jakarta NoSQL规范,提供了一种标准化的方式来处理NoSQL数据库。
- 与Java生态系统集成:利用CDI进行依赖注入和Eclipse MicroProfile进行配置,确保与Quarkus和Spring Boot等现代Java框架的兼容性。
Eclipse JNoSQL的限制和注意事项
虽然Eclipse JNoSQL为NoSQL数据库集成提供了显著的好处,但是保持平衡的观点时,有必要考虑一些缺点:
- 新标准的学习曲线:不熟悉Jakarta EE或MicroProfile的开发人员可能需要时间来理解和适应JNoSQL使用的规范和API。
- 数据库特定功能:虽然JNoSQL抽象了常见的NoSQL操作,但在没有额外定制的情况下,可能无法完全支持高级的数据库特定功能。
- 社区和生态系统:作为一个相对专门化的工具,其生态系统和社区支持要小于Hibernate或Spring Data等更广泛的Java框架。
- 性能调优:通用的API可能会引入轻微的性能开销,特别是对于高性能应用程序来说,与本机的数据库特定库相比。
了解这些限制有助于开发人员做出知情决策,并考虑JNoSQL最适合其项目的地方。
Eclipse JNoSQL支持的Jakarta EE规范
Eclipse JNoSQL支持Jakarta Data和Jakarta NoSQL,这是Jakarta EE生态系统中两个关键的规范。Jakarta EE生态系统。
Jakarta Data
它提供了一个标准的 API 用于访问和管理数据存储库,使开发人员能够轻松执行 CRUD 操作。重点在于简化分页、排序和动态查询。
Jakarta NoSQL
它为 NoSQL 数据库交互定义了统一的 API。它提供了诸如 @Entity
、@Id
和 @Column
这样的注解,用于将 Java 类映射到 NoSQL 集合,简化数据库操作。
这些规范减少了样板代码,并促进了跨数据库的可移植性,对于 Java 开发人员来说至关重要。
最新版本,版本 1.1.3,着重于提高可靠性、安全性和性能,同时引入了令人兴奋的新功能:
- Redis:增强了对 Redis Sentinel 的支持,以提高可用性。
- ArangoDB:安全性和密钥管理更新。
- Oracle NoSQL:新增凭据选项以实现更好的集成。
- JNoSQL Lite:增加了对记录、改善可追踪性的支持。
- 驱动程序更新:改进了各种 NoSQL 数据库的驱动程序。
- CDI Lite:现在支持 Java 记录
为了展示 Eclipse JNoSQL 1.1.3 的强大功能,我们将创建一个使用 ArangoDB 管理“Goals”(目标)的 Quarkus 应用程序。感谢 Jakarta EE 规范,可以在最小更改的情况下切换到其他 NoSQL 数据库,如 MongoDB 或 Oracle NoSQL。
逐步操作
第 1 步:设置 Quarkus
使用Quarkus Starter UI开始您的Quarkus项目,选择以下扩展:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB Driver
您的pom.xml
应该包括:
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.jnosql</groupId>
<artifactId>quarkus-jnosql-document-arangodb</artifactId>
<version>3.3.2</version>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第2步:实现数据库连接
在application.properties
中设置数据库连接:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
在本地使用Docker运行ArangoDB实例:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
在ArangoDB web UI中创建名为goals
的数据库和一个名为Goal
的集合。
第3步:对数据建模
使用Java的record特性和CDI Lite:
import jakarta.json.bind.annotation.JsonbProperty;
import jakarta.json.bind.annotation.JsonbPropertyOrder;
import jakarta.nosql.Column;
import jakarta.nosql.Entity;
import jakarta.nosql.Id;
import java.util.List;
"id", "title", "description", "priority", "tasks"}) ({
public record Goal(
"id") String id, (
"title") String title, (
"description") String description, (
"priority") int priority, (
"tasks") List<String> tasks) {} (
第4步:设置存储库
使用Jakarta Data定义存储库:
public interface NewYearWishes extends BasicRepository<Goal, String> {}
第5步:实现服务层
创建一个服务层来管理业务逻辑:
public class GoalService {
private final NewYearWishes newYearWishes;
public GoalService( (DatabaseType.DOCUMENT) NewYearWishes newYearWishes) {
this.newYearWishes = newYearWishes;
}
public List<Goal> findGoals(int page, int size) {
PageRequest pageRequest = PageRequest.ofPage(page).size(size);
return newYearWishes.findAll(pageRequest, Order.by(Sort.asc("priority"))).content();
}
public Goal save(Goal goal) {
return newYearWishes.save(goal);
}
public Optional<Goal> findById(String id) {
return newYearWishes.findById(id);
}
}
第6步:创建REST端点
定义一个REST资源:
"/goals") (
MediaType.APPLICATION_JSON) (
MediaType.APPLICATION_JSON) (
public class GoalResource {
private final GoalService goalService;
public GoalResource(GoalService goalService) {
this.goalService = goalService;
}
public List<Goal> goals( ("page") int page, ("size") int size) {
return goalService.findGoals(page, size);
}
public Goal create(Goal goal) {
return goalService.save(goal);
}
"{id}") (
public Goal findById( ("id") String id) {
return goalService.findById(id).orElseThrow(() -> new WebApplicationException("Goal not found", 404));
}
}
第7步:测试应用程序
以下是如何使用curl
测试您的应用程序:
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn JNoSQL",
"description": "Master NoSQL with JNoSQL",
"priority": 1,
"tasks": ["Read documentation", "Write sample code"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Get Fit",
"description": "Adopt a healthier lifestyle",
"priority": 2,
"tasks": ["Exercise daily", "Eat balanced meals", "Stay hydrated"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn Quarkus",
"description": "Explore Quarkus framework features",
"priority": 3,
"tasks": ["Set up Quarkus", "Create REST endpoints", "Integrate JNoSQL"]
}' \
http://localhost:8080/goals
列出Goals:
curl http://localhost:8080/goals?page=1&size=10
结论
Eclipse JNoSQL 1.1.3展示了其致力于让Java开发人员无缝交互NoSQL数据库的承诺。增强的功能和集成能力使开发人员能够构建灵活和可扩展的应用程序。更多详情,请查看GitHub上的完整示例。
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3