对于最新的稳定版本,请使用 Spring Data Couchbase 5.4.0! |
安装和配置
本章介绍使用磁带库时所需的常见安装和配置步骤。
配置
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-couchbase</artifactId>
<version>5.3.6</version>
</dependency>
这将引入多个依赖项,包括底层的 Couchbase Java SDK、常见的 Spring 依赖项以及作为 JSON 映射基础设施的 Jackson。
您还可以从 spring snapshot 存储库 ( https://repo.spring.io/snapshot )中获取快照,从 spring 里程碑存储库 ( 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 与任何 3.x 版本的 Couchbase Java SDK 兼容并受支持,该版本比发布依赖项中指定的版本新。要更改 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>
一旦你在 Classpath 上拥有了所有需要的依赖项,你就可以开始配置它了。 仅支持 Java 配置(在 4.0 中删除了 XML 配置)。
基于注释的配置 (“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 节点列表(用 a 分隔)。请注意,虽然
host 就足够了,建议这里添加 3 到 5 个 bootstrap 节点。Couchbase 将选取所有节点
从集群中自动发送,但可能是您提供的唯一节点在
您正在启动应用程序。couchbase://
,
和 通过 RBAC(基于角色的访问控制)在 Couchbase Server 集群中配置。
这反映了您要用于此配置的存储桶。userName
password
bucketName
此外,还可以通过覆盖该方法来优化 SDK 环境,该方法采用 a 以返回已配置的 .configureEnvironment
ClusterEnvironment.Builder
ClusterEnvironment
从此配置中可以自定义和覆盖更多内容作为自定义 bean(例如存储库、 验证和自定义转换器)。
如果使用 和 ,则可能会遇到前缀为 .
由于 Spring Data Couchbase 默认将类型信息存储为属性,因此可能会出现问题。
Override (例如返回 ) 以更改
所述属性的名称。SyncGateway CouchbaseMobile _ _class typeKey() MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE |
如果您启动应用程序,您应该会在日志中看到 Couchbase INFO 级别日志记录,这表明底层的 Couchbase Java SDK 正在连接到数据库。如果报告了任何错误,请确保给定的凭证 和主机信息正确无误。
配置多个存储桶
要利用多存储桶存储库,请在 Config 类中实现以下方法。 config*OperationsMapping 方法配置实体对象到存储桶的映射。 请小心方法名称 - 使用作为 Bean 的方法名称将导致使用该 Bean 的值,而不是方法的结果。
此示例将 Person → protected、User → mybucket 映射,其他所有内容都映射到 getBucketName()。 请注意,这仅通过 Repository 映射调用。
@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 );
}