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 操作,但在沒有額外定製的情況下,可能無法完全支援高級的、特定於數據庫的功能。
- 社區和生態系統:作為一個相對專業化的工具,其生態系統和社區支持比廣泛的 Java 框架如 Hibernate 或 Spring Data 要小。
- 性能調優:通用的 API 可能會引入輕微的性能開銷,特別是對於高性能應用程序來說,與本地的、特定於數據庫的庫相比。
了解這些限制有助於開發人員做出明智的決策,並考慮 JNoSQL 在其項目中的最佳適用性。
由 Eclipse JNoSQL 支持的 Jakarta EE 規範
Eclipse JNoSQL 支持 Jakarta Data 和 Jakarta NoSQL 這兩個在 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 record
為展示 Eclipse JNoSQL 1.1.3 的強大功能,我們將創建一個使用 ArangoDB 管理“目標”(Goals) 的 Quarkus 應用程序。感謝 Jakarta EE 規範,只需進行最小的更改即可切換到其他 NoSQL 數據庫,如 MongoDB 或 Oracle NoSQL。
逐步操作
第 1 步:設置 Quarkus
開始您的 Quarkus 專案,使用 Quarkus Starter UI,選擇以下擴展:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB 驅動程式
您的 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 網頁 UI 中創建名為 goals
的資料庫和一個集合 Goal
。
步驟 3:建模您的數據
使用 Java 的記錄功能與 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
列出目標:
curl http://localhost:8080/goals?page=1&size=10
結論
Eclipse JNoSQL 1.1.3 展示了致力于使 NoSQL 数据库与 Java 开发人员的交互变得无缝的承诺。增强的功能和集成能力使开发人员能够构建灵活且可扩展的应用程序。欲了解更多详细信息,请查看 GitHub 上的完整示例。
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3