对于最新稳定版本,请使用 Spring Data Couchbase 6.0.4spring-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(基于角色的访问控制)现在是强制性的,因此需要覆盖不同的属性才能进行配置:getConnectionStringgetUserNamegetPasswordgetBucketName。如果您想可选地使用非默认范围,可以覆盖 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。由于 SDK 2 和 3 无法共存于同一个类路径中,因此无法使用更早版本的 Couchbase。spring-doc.cadn.net.cn

实体

处理实体的方式没有改变,尽管由于 SDK 现在不再附带注解,因此仅支持 Spring-Data 相关的注解。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

The org.springframework.data.couchbase.core.mapping.Document annotation stayed the same.spring-doc.cadn.net.cn

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

自动索引管理

自动索引管理已重新设计,以支持更灵活的索引方式。 引入了新的注解,并移除了旧注解,如 @ViewIndexed@N1qlSecondaryIndexed@N1qlPrimaryIndexedspring-doc.cadn.net.cn

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

模板和响应式模板

由于 Couchbase SDK 3 移除了对 RxJava 的支持并改为支持 Reactor,因此 couchbaseTemplatereactiveCouchbaseTemplate 均可直接从 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

按 ID 插入或更新spring-doc.cadn.net.cn

插入spring-doc.cadn.net.cn

通过ID插入spring-doc.cadn.net.cn

更新spring-doc.cadn.net.cn

通过ID替换spring-doc.cadn.net.cn

根据 ID 查找spring-doc.cadn.net.cn

根据 ID 查找spring-doc.cadn.net.cn

按视图查找spring-doc.cadn.net.cn

(removed)spring-doc.cadn.net.cn

通过空间视图查找spring-doc.cadn.net.cn

(removed)spring-doc.cadn.net.cn

使用 N1QL 查找spring-doc.cadn.net.cn

按查询查找spring-doc.cadn.net.cn

通过 N1QL 投影查找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

存在IDspring-doc.cadn.net.cn

移除spring-doc.cadn.net.cn

通过 ID 移除spring-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 中的模板添加项
姓名 描述

通过查询移除spring-doc.cadn.net.cn

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

通过分析查找spring-doc.cadn.net.cn

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

根据副本 ID 查找spring-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 注解来覆盖 N1QL 查询的默认扫描一致性。spring-doc.cadn.net.cn

方法 getCouchbaseOperations() 也已被移除。您仍然可以通过类 CouchbaseTemplateCluster 访问原生 Java SDK 中的所有方法: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