|
对于最新稳定版本,请使用 Spring Data Couchbase 6.0.4! |
从 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
The org.springframework.data.couchbase.core.mapping.Document annotation stayed the same.
有关更多信息,请参见 实体建模。
自动索引管理
自动索引管理已重新设计,以支持更灵活的索引方式。
引入了新的注解,并移除了旧注解,如 @ViewIndexed、@N1qlSecondaryIndexed 和 @N1qlPrimaryIndexed。
有关更多信息,请参阅 自动索引管理。
模板和响应式模板
由于 Couchbase SDK 3 移除了对 RxJava 的支持并改为支持 Reactor,因此 couchbaseTemplate 和 reactiveCouchbaseTemplate 均可直接从 AbstractCouchbaseConfiguration 访问。
该模板已完全重构,现在使用流畅的 API 进行配置,而不是依赖大量的方法重载。这样做的优势在于,未来我们可以在不引入更多使导航变得复杂的方法重载的情况下扩展功能。
下表描述了 3.x 中的方法名称,并将其与 4.x 的等效项进行了比较:
| SDC 3.x | SDC 4.x |
|---|---|
保存 |
按 ID 插入或更新 |
插入 |
通过ID插入 |
更新 |
通过ID替换 |
根据 ID 查找 |
根据 ID 查找 |
按视图查找 |
(removed) |
通过空间视图查找 |
(removed) |
使用 N1QL 查找 |
按查询查找 |
通过 N1QL 投影查找 |
按查询查找 |
查询N1QL |
(直接调用 SDK) |
存在 |
存在ID |
移除 |
通过 ID 移除 |
执行 |
(直接调用 SDK) |
此外,还添加了以下在 3.x 版本中不可用的方法:
| 姓名 | 描述 |
|---|---|
通过查询移除 |
允许通过 N1QL 查询移除实体 |
通过分析查找 |
通过分析服务执行查找 |
根据副本 ID 查找 |
类似于 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 文档。