本章介绍使用库时所需的常见安装和配置步骤。Spring中文文档

安装

所有用于生产的版本都分布在 Maven Central 和 Spring 发布存储库中。 因此,该库可以像任何其他 maven 依赖项一样包含在内:Spring中文文档

配置

例 1.包括通过 maven 的依赖
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-couchbase</artifactId>
    <version>5.3.1</version>
</dependency>

这将引入多个依赖项,包括底层 Couchbase Java SDK、常见的 Spring 依赖项以及作为 JSON 映射基础设施的 Jackson。Spring中文文档

您还可以从 spring 快照存储库 ( https://repo.spring.io/snapshot ) 中抓取快照,从 spring milestone 存储库 ( https://repo.spring.io/milestone 中抓取里程碑版本)。 下面是有关如何使用当前 SNAPSHOT 依赖项的示例:Spring中文文档

快照配置

例 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 与任何比发布依赖项中指定的版本更新的 Couchbase Java SDK 3.x 版本兼容并受支持。要更改 Spring Data Couchbase 使用的 Couchbase Java SDK 版本,只需覆盖应用程序pom.xml中的依赖项,如下所示:Spring中文文档

例 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 Initialzr)
<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中文文档

基于注释的配置 (“JavaConfig”)

首先,您需要做的就是对抽象方法进行子类化并实现。AbstractCouchbaseConfigurationSpring中文文档

例 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 节点列表(用 分隔)。请注意,虽然一个 host 在开发中已经足够了,这里建议添加 3 到 5 个 bootstrap 节点。Couchbase 将选取所有节点 自动从群集中,但可能是您提供的唯一节点在 您正在启动应用程序。couchbase://,Spring中文文档

和 是通过 RBAC(基于角色的访问控制)在 Couchbase Server 集群中配置的。 这反映了要用于此配置的存储桶。userNamepasswordbucketNameSpring中文文档

此外,可以通过重写需要 a 返回配置的 .configureEnvironmentClusterEnvironment.BuilderClusterEnvironmentSpring中文文档

从此配置中可以自定义和覆盖更多内容作为自定义 bean(例如存储库、 验证和自定义转换器)。Spring中文文档

如果使用 和 ,则可能会遇到以 前缀为 前缀的字段的问题。 由于 Spring Data Couchbase 默认将类型信息存储为属性,这可能会有问题。 覆盖(例如返回)以更改 所述属性的名称。SyncGatewayCouchbaseMobile__classtypeKey()MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE

如果启动应用程序,则应在日志中看到 Couchbase INFO 级别日志记录,表明底层 Couchbase Java SDK 正在连接到数据库。如果报告任何错误,请确保给定的凭据 和主机信息正确无误。Spring中文文档

如果使用 和 ,则可能会遇到以 前缀为 前缀的字段的问题。 由于 Spring Data Couchbase 默认将类型信息存储为属性,这可能会有问题。 覆盖(例如返回)以更改 所述属性的名称。SyncGatewayCouchbaseMobile__classtypeKey()MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE

配置多个存储桶

要利用多存储桶存储库,请在 Config 类中实现以下方法。 config*OperationsMapping 方法配置实体对象到存储桶的映射。 小心方法名称 - 使用作为 Bean 的方法名称将导致使用该 Bean 的值,而不是方法的结果。Spring中文文档

此示例将 Person → protected、User →映射到 mybucket,其他所有内容都映射到 getBucketName()。 请注意,这仅映射通过存储库的调用。Spring中文文档

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