從 Spring Data Couchbase 3.x 遷移到 4.x

本章快速介紹了 4.x 中引入的主要更改,並概述了遷移時需要考慮的事項。

請注意,最低 Couchbase Server 版本已隱式提升至 5.5 及更高版本,我們建議執行至少 6.0.x 版本。

配置

由於主要目標是從 Java SDK 2 遷移到 3,配置已更改以適應新的 SDK,並且從長遠來看,也為作用域和集合做準備(但仍可在沒有集合支援的情況下使用)。

XML 配置支援已被移除,因此僅支援基於 Java/註解的配置。

您的配置仍需繼承 AbstractCouchbaseConfiguration,但由於 RBAC(基於角色的訪問控制)現在是強制性的,需要重寫不同的屬性才能進行配置:getConnectionStringgetUserNamegetPasswordgetBucketName。如果您想使用非預設作用域,可以選擇重寫 getScopeName 方法。請注意,如果您想使用基於證書的身份驗證或需要自定義密碼身份驗證,可以重寫 authenticator 方法來完成此任務。

新的 SDK 仍然有一個用於配置的環境,因此您可以重寫 configureEnvironment 方法並在需要時提供自定義配置。

欲瞭解更多資訊,請參閱安裝與配置

Spring Boot 版本相容性

Spring Boot 2.3.x 或更高版本依賴於 Spring Data Couchbase 4.x。早期版本的 Couchbase 不可用,因為 SDK 2 和 3 不能在同一個類路徑上共存。

實體

處理實體的方式沒有改變,儘管由於 SDK 現在不再提供註解,因此僅支援 Spring Data 相關的註解。

具體來說

  • com.couchbase.client.java.repository.annotation.Id 變為 import org.springframework.data.annotation.Id

  • com.couchbase.client.java.repository.annotation.Field 變為 import org.springframework.data.couchbase.core.mapping.Field

org.springframework.data.couchbase.core.mapping.Document 註解保持不變。

欲瞭解更多資訊,請參閱建模實體

自動索引管理

自動索引管理已經重新設計,以允許更靈活的索引。引入了新的註解,並移除了舊的註解,如 @ViewIndexed@N1qlSecondaryIndexed@N1qlPrimaryIndexed

欲瞭解更多資訊,請參閱自動索引管理

Template 和 ReactiveTemplate

由於 Couchbase SDK 3 移除了對 RxJava 的支援,取而代之的是增加了對 Reactor 的支援,因此 couchbaseTemplatereactiveCouchbaseTemplate 都可以直接從 AbstractCouchbaseConfiguration 訪問。

該模板已完全 overhauled,現在它使用流暢的 API 進行配置,而不是使用許多方法過載。這樣做的好處是,將來我們能夠擴充套件功能,而無需引入越來越多使導航複雜化的過載。

下表描述了 3.x 中的方法名稱,並將其與 4.x 中的等效方法進行了比較

表 1. 模板方法比較
SDC 3.x SDC 4.x

save

upsertById

insert

insertById

更新

replaceById

findById

findById

findByView

(已移除)

findBySpatialView

(已移除)

findByN1QL

findByQuery

findByN1QLProjection

findByQuery

queryN1QL

(直接呼叫 SDK)

exists

existsById

remove

removeById

execute

(直接呼叫 SDK)

此外,還添加了以下 3.x 中未提供的方法

表 2. 4.x 中模板新增功能
名稱 描述

removeByQuery

允許透過 N1QL 查詢刪除實體

findByAnalytics

透過分析服務執行查詢

findFromReplicasById

與 findById 類似,但考慮了副本

我們試圖統一併使 API 更緊密地與底層 SDK 語義對齊,以便更容易關聯和導航。

欲瞭解更多資訊,請參閱模板與直接操作

倉庫與查詢

  • org.springframework.data.couchbase.core.query.Query 變更為 org.springframework.data.couchbase.repository.Query

  • org.springframework.data.couchbase.repository.ReactiveCouchbaseSortingRepository 已被移除。請考慮繼承 ReactiveSortingRepositoryReactiveCouchbaseRepository

  • org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository 已被移除。請考慮繼承 PagingAndSortingRepositoryCouchbaseRepository

對檢視的支援已移除,N1QL 查詢現在是所有自定義倉庫方法以及預設內建方法的一等公民。

查詢派生本身的行為與上一版本相比沒有改變。如果您遇到過去有效但現在不再有效的查詢,請告知我們。

可以透過新的 ScanConsistency 註解覆蓋 N1QL 查詢的預設掃描一致性。

方法 getCouchbaseOperations() 也已被移除。您仍然可以透過 CouchbaseTemplate 類或 Cluster 訪問所有原生 Java SDK 方法

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.couchbase.core.CouchbaseTemplate;
import org.springframework.stereotype.Service;
import com.couchbase.client.java.Cluster;

@Service
public class MyService {

    @Autowired
    private CouchbaseTemplate couchbaseTemplate;

    @Autowired
    private Cluster cluster;
}

更多資訊請參閱Couchbase 倉庫

全文搜尋 (FTS)

FTS API 已簡化,現在可以透過 Cluster 類訪問

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.search.result.SearchResult;
import com.couchbase.client.java.search.result.SearchRow;
import com.couchbase.client.core.error.CouchbaseException;

@Service
public class MyService {

    @Autowired
    private Cluster cluster;

    public void myMethod() {
        try {
          final SearchResult result = cluster
            .searchQuery("index", SearchQuery.queryString("query"));

          for (SearchRow row : result.rows()) {
            System.out.println("Found row: " + row);
          }

          System.out.println("Reported total rows: "
            + result.metaData().metrics().totalRows());
        } catch (CouchbaseException ex) {
          ex.printStackTrace();
        }
    }
}

欲瞭解更多資訊,請參閱FTS 文件

© . This site is unofficial and not affiliated with VMware.