從 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(基於角色的訪問控制)現在是強制性的,需要重寫不同的屬性才能進行配置:getConnectionString、getUserName、getPassword 和 getBucketName。如果您想使用非預設作用域,可以選擇重寫 getScopeName 方法。請注意,如果您想使用基於證書的身份驗證或需要自定義密碼身份驗證,可以重寫 authenticator 方法來完成此任務。
新的 SDK 仍然有一個用於配置的環境,因此您可以重寫 configureEnvironment 方法並在需要時提供自定義配置。
欲瞭解更多資訊,請參閱安裝與配置。
實體
處理實體的方式沒有改變,儘管由於 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 的支援,因此 couchbaseTemplate 和 reactiveCouchbaseTemplate 都可以直接從 AbstractCouchbaseConfiguration 訪問。
該模板已完全 overhauled,現在它使用流暢的 API 進行配置,而不是使用許多方法過載。這樣做的好處是,將來我們能夠擴充套件功能,而無需引入越來越多使導航複雜化的過載。
下表描述了 3.x 中的方法名稱,並將其與 4.x 中的等效方法進行了比較
| 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 中未提供的方法
| 名稱 | 描述 |
|---|---|
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已被移除。請考慮繼承ReactiveSortingRepository或ReactiveCouchbaseRepository -
org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository已被移除。請考慮繼承PagingAndSortingRepository或CouchbaseRepository
| 對檢視的支援已移除,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 文件。