此版本仍处于开发阶段,尚未被视为稳定版本。如需使用最新稳定版本,请采用 Spring Data Couchbase 6.0.4spring-doc.cadn.net.cn

安装与配置

本章介绍了在使用该库时所需的常见安装和配置步骤。spring-doc.cadn.net.cn

安装

所有旨在用于生产环境的版本均通过 Maven Central 和 Spring 发布仓库进行分发。 因此,该库可以像任何其他 Maven 依赖项一样被包含:spring-doc.cadn.net.cn

兼容性

获取正确依赖项的最简单方法是使用 Spring Initializr 创建一个项目。 父级 Spring Boot Starter 制品已包含所需的依赖项,无需单独指定。spring-doc.cadn.net.cn

Spring Boot 版本兼容性

Couchbase Java SDK 兼容性

配置

示例 1. 通过 Maven 包含依赖项
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-couchbase</artifactId>
    <version>6.0.5-SNAPSHOT</version>
</dependency>

这将引入多个依赖项,包括底层的 Couchbase Java SDK、常用的 Spring 依赖项,以及作为 JSON 映射基础设施的 Jackson。spring-doc.cadn.net.cn

您也可以从 Spring 快照仓库(https://repo.spring.io/snapshot)获取快照版本,并从 Spring 里程碑仓库(https://repo.spring.io/milestone)获取里程碑发布版本。 以下是如何使用当前 SNAPSHOT 依赖的示例:spring-doc.cadn.net.cn

快照配置

示例 2. 使用快照版本
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-couchbase</artifactId>
  <version>${version}-SNAPSHOT</version>
</dependency>

<repository>
  <id>spring-snapshot</id>
  <name>Spring Snapshot Repository</name>
  <url>https://repo.spring.io/snapshot</url>
</repository>

覆盖 Couchbase SDK 版本

某些用户可能希望使用与 Spring Data Couchbase 发行版中引用的版本不同的 Couchbase Java SDK 版本,以便获取错误修复和安全漏洞修复。由于 Couchbase Java SDK 的次要版本发布向后兼容,此版本的 Spring Data Couchbase 与支持任何比发行版依赖项中指定的版本更新的 3.x 版本的 Couchbase Java SDK。若要更改 Spring Data Couchbase 使用的 Couchbase Java SDK 版本,只需在应用程序的 pom.xml 中覆盖该依赖项,如下所示:spring-doc.cadn.net.cn

示例 3. 如果直接使用 spring-data-couchbase 依赖项
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-couchbase</artifactId>
  <version>${version}</version>
  <exclusions> <!-- exclude Couchbase Java SDK -->
    <exclusion>
      <groupId>com.couchbase.client</groupId>
      <artifactId>java-client</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency> <!-- add dependency for specific Couchbase Java SDK version -->
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.4.7</version>
</dependency>
示例 4. 如果使用 spring-data-starter-couchbase 依赖项(来自 Spring Initializr)
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>x.y.z</version>
  <relativePath/>
</parent>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-couchbase</artifactId>
  <exclusions> <!-- exclude Couchbase Java SDK -->
    <exclusion>
      <groupId>com.couchbase.client</groupId>
      <artifactId>java-client</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency> <!-- add dependency for specific Couchbase Java SDK version -->
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.4.7</version>
</dependency>

一旦类路径上有了所有必需的依赖项,您就可以开始配置了。 仅支持 Java 配置(XML 配置已在 4.0 版本中移除)。spring-doc.cadn.net.cn

基于注解的配置("JavaConfig")

要开始使用,您只需要继承 AbstractCouchbaseConfiguration 并实现抽象方法即可。spring-doc.cadn.net.cn

示例 5. 扩展 AbstractCouchbaseConfiguration
@Configuration
public class Config extends AbstractCouchbaseConfiguration {

    @Override
    public String getConnectionString() {
        return "couchbase://127.0.0.1";
    }

    @Override
    public String getUserName() {
        return "Administrator";
    }

    @Override
    public String getPassword() {
        return "password";
    }

    @Override
    public String getBucketName() {
        return "travel-sample";
    }
}

连接字符串由一组主机列表和可选的方案(couchbase://)组成,如上代码所示。 您需要提供的只是用于引导的 Couchbase 节点列表(以 , 分隔)。请注意,虽然在开发环境中一个主机就足够了,但建议在此处添加 3 到 5 个引导节点。Couchbase 会自动从集群中获取所有节点,但也可能出现您仅提供的那个节点在启动应用程序时遇到问题而唯一可用的情况。spring-doc.cadn.net.cn

The userNamepassword 是通过基于角色的访问控制 (RBAC) 在您的 Couchbase Server 集群中配置的。 The bucketName 反映了您希望用于此配置的存储桶。spring-doc.cadn.net.cn

此外,SDK 环境可以通过重写 configureEnvironment 方法来调整,该方法接受一个 ClusterEnvironment.Builder 并返回一个配置好的 ClusterEnvironmentspring-doc.cadn.net.cn

许多其他内容也可以从该配置中作为自定义 bean 进行自定义和覆盖(例如仓库、验证和自定义转换器)。spring-doc.cadn.net.cn

如果您使用 SyncGatewayCouchbaseMobile,可能会遇到以 _ 为前缀的字段的问题。 由于 Spring Data Couchbase 默认将类型信息存储为 _class 属性,这可能会带来问题。 请重写 typeKey()(例如返回 MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE)以更改该属性的名称。

如果您启动应用程序,您应该能在日志中看到 Couchbase INFO 级别的日志,这表明底层的 Couchbase Java SDK 正在连接到数据库。如果报告任何错误,请确保给定的凭据和主机信息是正确的。spring-doc.cadn.net.cn

配置多个存储桶

要利用多存储库仓库,请在您的 Config 类中实现以下方法。 config*OperationsMapping 方法用于配置实体对象到存储桶的映射。 请小心使用方法名——如果使用一个 Bean 的名称作为方法名,将导致使用该 Bean 的值而不是该方法的返回值。spring-doc.cadn.net.cn

此示例将 Person 映射为 protected,User 映射为 mybucket,其余所有情况则调用 getBucketName()。 请注意,这仅适用于通过 Repository 的调用。spring-doc.cadn.net.cn

@Override
public void configureReactiveRepositoryOperationsMapping(ReactiveRepositoryOperationsMapping baseMapping) {
 try {
  ReactiveCouchbaseTemplate personTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("protected"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(Person.class,  personTemplate); // Person goes in "protected" bucket
  ReactiveCouchbaseTemplate userTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("mybucket"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(User.class,  userTemplate); // User goes in "mybucket"
  // everything else goes in getBucketName()
 } catch (Exception e) {
  throw e;
 }
}
@Override
public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) {
 try {
  CouchbaseTemplate personTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("protected"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(Person.class,  personTemplate); // Person goes in "protected" bucket
  CouchbaseTemplate userTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("mybucket"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(User.class,  userTemplate); // User goes in "mybucket"
  // everything else goes in getBucketName()
 } catch (Exception e) {
  throw e;
 }
}

// do not use reactiveCouchbaseTemplate for the name of this method, otherwise the value of that bean
// will be used instead of the result of this call (the client factory arg is different)
public ReactiveCouchbaseTemplate myReactiveCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
  MappingCouchbaseConverter mappingCouchbaseConverter) {
 return new ReactiveCouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter);
}

// do not use couchbaseTemplate for the name of this method, otherwise the value of that been
// will be used instead of the result from this call (the client factory arg is different)
public CouchbaseTemplate myCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
  MappingCouchbaseConverter mappingCouchbaseConverter) {
 return new CouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter);
}

// do not use couchbaseClientFactory for the name of this method, otherwise the value of that bean will
// will be used instead of this call being made ( bucketname is an arg here, instead of using bucketName() )
public CouchbaseClientFactory myCouchbaseClientFactory(String bucketName) {
 return new SimpleCouchbaseClientFactory(getConnectionString(),authenticator(), bucketName );
}