从 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 迁移到 Java SDK 3,因此配置已更改以适应新的 SDK,并且从长远来看,还为范围和集合做好准备(但仍然可以在没有集合支持的情况下使用)。spring-doc.cadn.net.cn

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

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

新开发工具包仍然具有用于配置它的环境,因此您可以覆盖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 不能位于同一 Classpath 上。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

Template 和 ReactiveTemplate

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

该模板已经过全面修改,因此它现在使用 Fluent 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

insertByIdspring-doc.cadn.net.cn

更新spring-doc.cadn.net.cn

replaceByIdspring-doc.cadn.net.cn

查找ByIdspring-doc.cadn.net.cn

查找ByIdspring-doc.cadn.net.cn

查找ByViewspring-doc.cadn.net.cn

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

findBySpatialViewspring-doc.cadn.net.cn

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

查找ByN1QLspring-doc.cadn.net.cn

findByQuery 查找spring-doc.cadn.net.cn

findByN1QLProjectionspring-doc.cadn.net.cn

findByQuery 查找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

删除ByIdspring-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 中的模板添加
名字 描述

removeByQueryspring-doc.cadn.net.cn

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

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

通过 Analytics 服务执行查找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()也被删除。您仍然可以通过类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();
        }
    }
}