此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Couchbase 5.5.2spring-doc.cadn.net.cn

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

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

请注意,Couchbase Server 的最低版本已隐式提升至 5.5 及更高版本,我们建议至少运行 6.0.x。spring-doc.cadn.net.cn

配置

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

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

您的配置仍然必须扩展AbstractCouchbaseConfiguration,但由于 RBAC(基于角色的访问控制)现在是强制性的,因此需要覆盖不同的属性才能进行配置:getConnectionString,getUserName,getPasswordgetBucketName. 如果要选择性地使用非默认范围,可以覆盖getScopeName方法。 请注意,如果要使用基于证书的身份验证或需要自定义密码身份验证,则authenticator方法可以重写来执行此任务。spring-doc.cadn.net.cn

新 SDK 仍然具有用于配置它的环境,因此您可以覆盖configureEnvironment方法,并在需要时提供自定义配置。spring-doc.cadn.net.cn

有关详细信息,请参阅安装和配置spring-doc.cadn.net.cn

Spring Boot 版本兼容性

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

实体

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

具体说来:spring-doc.cadn.net.cn

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

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

org.springframework.data.couchbase.core.mapping.Document注释保持不变。spring-doc.cadn.net.cn

有关详细信息,请参阅建模实体spring-doc.cadn.net.cn

自动索引管理

自动索引管理已重新设计,以允许更灵活的索引。引入了新的注释和旧的注释,例如@ViewIndexed,@N1qlSecondaryIndexed@N1qlPrimaryIndexed被删除。spring-doc.cadn.net.cn

有关详细信息,请参阅自动索引管理。spring-doc.cadn.net.cn

模板和 ReactiveTemplate

由于 Couchbase SDK 3 删除了对RxJava而是添加了对Reactor,则couchbaseTemplate以及reactiveCouchbaseTemplate可以直接从AbstractCouchbaseConfiguration.spring-doc.cadn.net.cn

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

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

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

spring-doc.cadn.net.cn

upsertByIdspring-doc.cadn.net.cn

插入spring-doc.cadn.net.cn

插入ByIdspring-doc.cadn.net.cn

更新spring-doc.cadn.net.cn

替换 ByIdspring-doc.cadn.net.cn

查找 ByIdspring-doc.cadn.net.cn

查找 ByIdspring-doc.cadn.net.cn

findByViewspring-doc.cadn.net.cn

(已删除)spring-doc.cadn.net.cn

findBySpatialViewspring-doc.cadn.net.cn

(已删除)spring-doc.cadn.net.cn

查找ByN1QLspring-doc.cadn.net.cn

查找通过查询spring-doc.cadn.net.cn

findByN1QL投影spring-doc.cadn.net.cn

查找通过查询spring-doc.cadn.net.cn

查询N1QLspring-doc.cadn.net.cn

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

存在spring-doc.cadn.net.cn

存在ByIdspring-doc.cadn.net.cn

删除spring-doc.cadn.net.cn

removeByIdspring-doc.cadn.net.cn

执行spring-doc.cadn.net.cn

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

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

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

removeBy查询spring-doc.cadn.net.cn

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

findByAnalyticsspring-doc.cadn.net.cn

通过分析服务执行查找spring-doc.cadn.net.cn

findFromReplicasByIdspring-doc.cadn.net.cn

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

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

有关详细信息,请参阅模板和直接作spring-doc.cadn.net.cn

存储库和查询

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

  • org.springframework.data.couchbase.repository.ReactiveCouchbaseSortingRepository已被删除。考虑延长ReactiveSortingRepositoryReactiveCouchbaseRepositoryspring-doc.cadn.net.cn

  • org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository已被删除。考虑延长PagingAndSortingRepositoryCouchbaseRepositoryspring-doc.cadn.net.cn

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

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

可以通过新的ScanConsistency注解。spring-doc.cadn.net.cn

方法getCouchbaseOperations()也已被删除。您仍然可以通过类访问本机 Java SDK 中的所有方法CouchbaseTemplateCluster:spring-doc.cadn.net.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.cadn.net.cn

全文搜索 (FTS)

FTS API 已得到简化,现在可以通过Cluster类:spring-doc.cadn.net.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();
        }
    }
}

有关更多信息,请参阅 FTS 文档spring-doc.cadn.net.cn