本章介绍使用库时所需的常见安装和配置步骤。
配置
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-couchbase</artifactId>
<version>5.3.1</version>
</dependency>
这将引入多个依赖项,包括底层 Couchbase Java SDK、常见的 Spring 依赖项以及作为 JSON 映射基础设施的 Jackson。
您还可以从 spring 快照存储库 ( https://repo.spring.io/snapshot ) 中抓取快照,从 spring milestone 存储库 ( https://repo.spring.io/milestone 中抓取里程碑版本)。 下面是有关如何使用当前 SNAPSHOT 依赖项的示例:
快照配置
<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中的依赖项,如下所示:
<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>
<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 中删除)。
基于注释的配置 (“JavaConfig”)
首先,您需要做的就是对抽象方法进行子类化并实现。AbstractCouchbaseConfiguration
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://
,
和 是通过 RBAC(基于角色的访问控制)在 Couchbase Server 集群中配置的。
这反映了要用于此配置的存储桶。userName
password
bucketName
此外,可以通过重写需要 a 返回配置的 .configureEnvironment
ClusterEnvironment.Builder
ClusterEnvironment
从此配置中可以自定义和覆盖更多内容作为自定义 bean(例如存储库、 验证和自定义转换器)。
如果使用 和 ,则可能会遇到以 前缀为 前缀的字段的问题。
由于 Spring Data Couchbase 默认将类型信息存储为属性,这可能会有问题。
覆盖(例如返回)以更改
所述属性的名称。SyncGateway CouchbaseMobile _ _class typeKey() MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE |
如果启动应用程序,则应在日志中看到 Couchbase INFO 级别日志记录,表明底层 Couchbase Java SDK 正在连接到数据库。如果报告任何错误,请确保给定的凭据 和主机信息正确无误。
如果使用 和 ,则可能会遇到以 前缀为 前缀的字段的问题。
由于 Spring Data Couchbase 默认将类型信息存储为属性,这可能会有问题。
覆盖(例如返回)以更改
所述属性的名称。SyncGateway CouchbaseMobile _ _class typeKey() MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE |
配置多个存储桶
要利用多存储桶存储库,请在 Config 类中实现以下方法。 config*OperationsMapping 方法配置实体对象到存储桶的映射。 小心方法名称 - 使用作为 Bean 的方法名称将导致使用该 Bean 的值,而不是方法的结果。
此示例将 Person → protected、User →映射到 mybucket,其他所有内容都映射到 getBucketName()。 请注意,这仅映射通过存储库的调用。
@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 );
}