【问题标题】:Configure Spring Data Couchbase on a cluster host address在集群主机地址上配置 Spring Data Couchbase
【发布时间】:2023-03-14 20:38:01
【问题描述】:

我的数据人员给了我http://127.0.0.1:8091/pools url 以连接到我们的Couchbase 服务器,我被告知pools 后缀是集群中所有节点的地址。

我使用 Spring 4.2.0.RELEASE 和 spring-data-couchbase 2.0.0.M1 对抗 Couchbase 2.5.1 企业版(build-1083)

现在,如果我将上面的 url 按原样添加到 getBootstrapHosts 列表中:

  @Override
  protected List<String> getBootstrapHosts() {
    return Collections.singletonList(couchbaseProperties.getHost());
  }

8091/pools 值出现数字格式异常。

但是当使用http://127.0.0.1:8091 url 时,我得到一个无效密码异常。

我认为第一个 url 将被使用,但不是我所采用的方式。

在 AbstractCouchbaseConfiguration 类中可能有一个我应该重写的方法,但是查看源代码并没有真正启发我。

这里是 Couchbase 配置类。

@Configuration
@EnableCouchbaseRepositories(basePackages = { "com.thalasoft.data.couchbase.repository" })
@ComponentScan(nameGenerator = PackageBeanNameGenerator.class, basePackages = { "com.thalasoft.data.couchbase.config" })
@EnableTransactionManagement
public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {

  private static Logger logger = LoggerFactory.getLogger(CouchbaseConfiguration.class);

  @Autowired
  private CouchbaseProperties couchbaseProperties;

  @Override
  protected List<String> getBootstrapHosts() {
    return Collections.singletonList(couchbaseProperties.getHost());
  }

  @Override
  protected String getBucketName() {
    return couchbaseProperties.getBucketName();
  }

  @Override
  protected String getBucketPassword() {
    return couchbaseProperties.getBucketPassword();
  }

  @Bean
  public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
     return new PropertySourcesPlaceholderConfigurer();
  }

  @Bean
  public LocalValidatorFactoryBean validator() {
    return new LocalValidatorFactoryBean();
  }

  @Bean
  public ValidatingCouchbaseEventListener validationEventListener() {
    return new ValidatingCouchbaseEventListener(validator());
  }

}

【问题讨论】:

  • pools 后缀是节点将服务于“集群图”的端点,可用于提取集群中所有节点的列表。但是,2.x SDK 将设法自行获取该集群图。它只需要一个或最好是两个节点的 ip 或主机名进行初始联系(引导)

标签: couchbase spring-data-couchbase


【解决方案1】:

您的数据库管理员给您127.0.0.1 作为连接地址这一事实看起来很奇怪,但如果集群的一个节点与客户端代码在同一位置运行,这确实可能是有效的...

这种基于 url 的语法是用于 1.4.x 生成 SDK 的语法,而 2.x 中的配置确实有点不同(反映了 Couchbase SDK 在 1.4.x 和 2.x 之间的演变):您只需要在列表中提供要引导的每个节点的主机名或 ip。

您应该只使用"127.0.0.1"。您也可能需要指定存储桶名称和/或密码(询问您的管理员)。 Spring Data Couchbase 使用的默认值是 "default"""(空密码),但您可以覆盖 AbsctractCouchbaseConfiguration 中的 getBucketName()getBucketPassword() 方法来更改它。

PS:Spring Data Couchbase 文档可在 here 获得

【讨论】:

  • 我读过 Couchbase 强烈建议将数据库与代码放在一起。
  • 如果我没有节点列表怎么办?事实上,我们有太多的节点。为什么我们不能保持集群寻址?
  • 我所指的列表只是引导列表......这是从至少两个节点引导的弹性的最佳实践:如果一个节点关闭,引导过程仍然可以发现来自第二个节点的整个集群。之后,SDK 对集群有全局视野,您实际上不需要提供详尽的节点列表。
  • 我已经阅读了 1.4 和当前版本的文档,但看不到应该如何处理主机中的池名称。我们的数据库具有上述池尾随 URL 以及存储桶名称和密码。现在我希望使用当前版本的 SDC。您知道如何使用注释配置这 3 个变量吗?
  • 我解释了更改引导节点、存储桶和密码的方法,您可以通过扩展 AbstractCouchbaseConfiguration 来做到这一点...从文档docs.spring.io/spring-data/couchbase/docs/2.0.0.M1/reference/… 中直接获得示例
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2014-02-17
  • 2015-11-15
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多