此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Couchbase 5.4.0spring-doc.cn

从 Spring Data Couchbase 3.x 迁移到 4.x

本章是 4.x 中引入的主要更改的快速参考,并简要概述了迁移时需要考虑的事项。spring-doc.cn

请注意,隐式地将最低 Couchbase Server 版本升级到 5.5 及更高版本,我们建议至少运行 6.0.x。spring-doc.cn

配置

由于主要目标是从 Java SDK 2 迁移到 Java SDK 3,因此配置已更改以适应新的 SDK,并且从长远来看,还为范围和集合做好准备(但仍然可以在没有集合支持的情况下使用)。spring-doc.cn

已删除 XML 配置支持,因此仅支持基于 java/注释的配置。

您的配置仍必须扩展 ,但由于 RBAC(基于角色的访问控制)现在是必需的,因此需要覆盖不同的属性才能进行配置:、 和 。如果要使用非默认范围(可选),则可以覆盖该方法。请注意,如果要使用基于证书的身份验证或需要自定义密码身份验证,则可以覆盖该方法以执行此任务。AbstractCouchbaseConfigurationgetConnectionStringgetUserNamegetPasswordgetBucketNamegetScopeNameauthenticatorspring-doc.cn

新 SDK 仍然具有用于配置它的环境,因此您可以根据需要覆盖该方法并提供自定义配置。configureEnvironmentspring-doc.cn

有关更多信息,请参阅安装和配置spring-doc.cn

Spring Boot 版本兼容性

Spring Boot 2.3.x 或更高版本依赖于 Spring Data Couchbase 4.x.早期版本的 Couchbase 不可用,因为 SDK 2 和 3 不能位于同一 Classpath 上。spring-doc.cn

实体

如何处理实体没有改变,尽管由于 SDK 现在不再提供 Comments,因此仅支持与 Spring-Data 相关的 Comments。spring-doc.cn

具体说来:spring-doc.cn

  • com.couchbase.client.java.repository.annotation.Id成为import org.springframework.data.annotation.Idspring-doc.cn

  • com.couchbase.client.java.repository.annotation.Field成为import org.springframework.data.couchbase.core.mapping.Fieldspring-doc.cn

注释保持不变。org.springframework.data.couchbase.core.mapping.Documentspring-doc.cn

有关更多信息,请参阅建模实体spring-doc.cn

自动索引管理

自动索引管理已经过重新设计,允许更灵活的索引。 引入了新的注释,并删除了 等旧注释。@ViewIndexed@N1qlSecondaryIndexed@N1qlPrimaryIndexedspring-doc.cn

有关更多信息,请参阅自动索引管理spring-doc.cn

Template 和 ReactiveTemplate

由于 Couchbase SDK 3 删除了对 的支持,而是增加了对 的支持,因此 和 都可以从 直接访问 。RxJavaReactorcouchbaseTemplatereactiveCouchbaseTemplateAbstractCouchbaseConfigurationspring-doc.cn

该模板已经过全面修改,因此它现在使用 Fluent API 进行配置,而不是使用许多方法重载。这样做的好处是,将来我们能够扩展功能,而不必引入越来越多的重载,从而使导航变得复杂。spring-doc.cn

下表描述了 3.x 中的方法名称,并将它们与 4.x 中的等效方法进行了比较:spring-doc.cn

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

spring-doc.cn

upsertByIdspring-doc.cn

插入spring-doc.cn

insertByIdspring-doc.cn

更新spring-doc.cn

replaceByIdspring-doc.cn

查找ByIdspring-doc.cn

查找ByIdspring-doc.cn

查找ByViewspring-doc.cn

(已删除)spring-doc.cn

findBySpatialViewspring-doc.cn

(已删除)spring-doc.cn

查找ByN1QLspring-doc.cn

findByQuery 查找spring-doc.cn

findByN1QLProjectionspring-doc.cn

findByQuery 查找spring-doc.cn

查询 N1QLspring-doc.cn

(直接调用 SDK)spring-doc.cn

存在spring-doc.cn

存在ByIdspring-doc.cn

删除spring-doc.cn

删除ByIdspring-doc.cn

执行spring-doc.cn

(直接调用 SDK)spring-doc.cn

此外,还添加了以下在 3.x 中不可用的方法:spring-doc.cn

表 2.4.x 中的模板添加
名字 描述

removeByQueryspring-doc.cn

允许通过 N1QL 查询删除实体spring-doc.cn

查找分析spring-doc.cn

通过 Analytics 服务执行查找spring-doc.cn

findFromReplicasByIdspring-doc.cn

与 findById 类似,但考虑了副本spring-doc.cn

我们尝试将 API 更紧密地统一和对齐到底层 SDK 语义,以便它们更容易关联和导航。spring-doc.cn

有关更多信息,请参阅模板和直接操作spring-doc.cn

存储库和查询

  • org.springframework.data.couchbase.core.query.Query成为org.springframework.data.couchbase.repository.Queryspring-doc.cn

  • org.springframework.data.couchbase.repository.ReactiveCouchbaseSortingRepository已被删除。考虑扩展 或ReactiveSortingRepositoryReactiveCouchbaseRepositoryspring-doc.cn

  • org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository已被删除。考虑扩展 或PagingAndSortingRepositoryCouchbaseRepositoryspring-doc.cn

已删除对视图的支持,N1QL 查询现在是所有自定义存储库方法以及默认内置方法的一等公民。

与以前的版本相比,查询派生应该如何工作的行为本身没有改变。如果您遇到任何过去有效但现在不再有效的问题,请告诉我们。spring-doc.cn

可以通过新注释覆盖 N1QL 查询的默认扫描一致性。ScanConsistencyspring-doc.cn

该方法也已被删除。您仍然可以通过类 或 :getCouchbaseOperations()CouchbaseTemplateClusterspring-doc.cn

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 存储库spring-doc.cn

全文搜索 (FTS)

FTS API 已简化,现在可以通过以下类访问:Clusterspring-doc.cn

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();
        }
    }
}