从 Spring Data Couchbase 3.x 迁移到 4.x
本章是 4.x 中引入的主要更改的快速参考,并简要概述了迁移时需要考虑的事项。
请注意,隐式地将最低 Couchbase Server 版本升级到 5.5 及更高版本,我们建议至少运行 6.0.x。
配置
由于主要目标是从 Java SDK 2 迁移到 Java SDK 3,因此配置已更改以适应新的 SDK,并且从长远来看,还为范围和集合做好准备(但仍然可以在没有集合支持的情况下使用)。
已删除 XML 配置支持,因此仅支持基于 java/注释的配置。 |
您的配置仍然必须扩展AbstractCouchbaseConfiguration
,但是由于 RBAC(基于角色的访问控制)现在是强制性的,因此需要覆盖不同的属性才能进行配置:getConnectionString
,getUserName
,getPassword
和getBucketName
.如果要使用非默认范围(可选),可以覆盖getScopeName
方法。请注意,如果要使用基于证书的身份验证,或者需要自定义密码身份验证,则authenticator
method 来执行此任务。
新开发工具包仍然具有用于配置它的环境,因此您可以覆盖configureEnvironment
方法,并在需要时提供自定义配置。
有关更多信息,请参阅安装和配置。
实体
如何处理实体没有改变,尽管由于 SDK 现在不再提供 Comments,因此仅支持与 Spring-Data 相关的 Comments。
具体说来:
-
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
.
该模板已经过全面修改,因此它现在使用 Fluent API 进行配置,而不是使用许多方法重载。这样做的好处是,将来我们能够扩展功能,而不必引入越来越多的重载,从而使导航变得复杂。
下表描述了 3.x 中的方法名称,并将它们与 4.x 中的等效方法进行了比较:
SDC 3.x | SDC 4.x |
---|---|
救 |
upsertById |
插入 |
insertById |
更新 |
replaceById |
查找ById |
查找ById |
查找ByView |
(已删除) |
findBySpatialView |
(已删除) |
查找ByN1QL |
findByQuery 查找 |
findByN1QLProjection |
findByQuery 查找 |
查询 N1QL |
(直接调用 SDK) |
存在 |
存在ById |
删除 |
删除ById |
执行 |
(直接调用 SDK) |
此外,还添加了以下在 3.x 中不可用的方法:
名字 | 描述 |
---|---|
removeByQuery |
允许通过 N1QL 查询删除实体 |
查找分析 |
通过 Analytics 服务执行查找 |
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
注解。
方法getCouchbaseOperations()
也被删除。您仍然可以通过类CouchbaseTemplate
或Cluster
:
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 文档。