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

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

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

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

配置

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

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

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

新开发工具包仍然具有用于配置它的环境,因此您可以覆盖configureEnvironment方法,并在需要时提供自定义配置。

有关更多信息,请参阅安装和配置

Spring Boot 版本兼容性

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

实体

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

具体说来:

  • 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

org.springframework.data.couchbase.core.mapping.Document注释保持不变。

有关更多信息,请参阅建模实体

自动索引管理

自动索引管理已经过重新设计,允许更灵活的索引。 引入了新的注释,以及像@ViewIndexed,@N1qlSecondaryIndexed@N1qlPrimaryIndexed被删除。

有关更多信息,请参阅自动索引管理

Template 和 ReactiveTemplate

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

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

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

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

upsertById

插入

insertById

更新

replaceById

查找ById

查找ById

查找ByView

(已删除)

findBySpatialView

(已删除)

查找ByN1QL

findByQuery 查找

findByN1QLProjection

findByQuery 查找

查询 N1QL

(直接调用 SDK)

存在

存在ById

删除

删除ById

执行

(直接调用 SDK)

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

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

removeByQuery

允许通过 N1QL 查询删除实体

查找分析

通过 Analytics 服务执行查找

findFromReplicasById

与 findById 类似,但考虑了副本

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

有关更多信息,请参阅模板和直接作

存储库和查询

  • org.springframework.data.couchbase.core.query.Query成为org.springframework.data.couchbase.repository.Query

  • org.springframework.data.couchbase.repository.ReactiveCouchbaseSortingRepository已被删除。考虑扩展ReactiveSortingRepositoryReactiveCouchbaseRepository

  • org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository已被删除。考虑扩展PagingAndSortingRepositoryCouchbaseRepository

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

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

可以通过新的ScanConsistency注解。

方法getCouchbaseOperations()也被删除。您仍然可以通过类CouchbaseTemplateCluster:

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

Full Text Search (FTS)

The FTS API has been simplified and now can be accessed via the Cluster class:

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

APP信息