首页 > 解决方案 > Elasticsearch 客户端默认为 localhost

问题描述

我在我的 Spring Boot (2.5.4) 应用程序中使用 spring.data.elasticsearch 和 Elasticsearch 7.14.1。

我的 application.properties 是这样的

spring.elasticsearch.rest.uris=elasticsearch:9200
spring.data.elasticsearch.cluster=elasticsearch:9200
spring.data.elasticsearch.repositories.enabled=true

只要调用来自本地主机,就可以正常工作,没有问题。但是,当我尝试启动我的 Spring Boot 容器时,我看到一个失败NoReachableHostException

    reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.data.elasticsearch.client.NoReachableHostException: Host 'localhost:9200' not reachable. Cluster state is offline.
blah-blah-service 
 Caused by: org.springframework.data.elasticsearch.client.NoReachableHostException: Host **'localhost:9200'** not reachable. Cluster state is offline.
blah-blah-service         
 at org.springframework.data.elasticsearch.client.reactive.SingleNodeHostProvider.lambda$lookupActiveHost$3(SingleNodeHostProvider.java:101) 

显然,无论出于何种原因,我建议使用“elasticsearch”主机(定义的网络,经过测试并可以从 docker 容器内部和外部访问)并没有很好地与 Spring Data 配合使用。我什至用过

@PropertySource("classpath:mysearch.properties")

在我的应用程序中尝试将这些属性引入应用程序,但看起来没有任何效果。我的 Elasticsearch 配置中是否缺少某些内容或其他内容?

PS:我curl http://elasticsearch:9200在容器内锻炼过,没有发现任何问题

标签: javaspring-bootelasticsearchspring-data-elasticsearch

解决方案


这些配置是 Spring Boot 特定的,Spring Data Elasticsearch 不使用它们。但据我所见,您正在配置传输客户端(集群条目,无论如何都不应该使用)和命令式REST 客户端,但根据错误消息,您正在使用反应式REST 客户端。

根据Spring Boot 文档,您需要设置spring.data.elasticsearch.client.reactive.endpoints


推荐阅读