Spring整合Elasticsearch 6.2.3连接异常求助
Spring与Elasticsearch 6.2.3连接失败排查方案
我帮你梳理下Spring Data Elasticsearch 6.2.3版本连接失败的常见排查点和正确配置方式,你可以一步步核对:
核对集群与节点名称配置
你代码里node.name的内容没写完,首先要确保cluster.name和ES服务端elasticsearch.yml中的cluster.name完全一致;如果服务端没特意指定node.name,其实可以不用在Spring配置里设置这个参数,避免因名称不匹配导致连接失败。严格匹配版本兼容性
ES 6.2.3对应的Spring Data Elasticsearch版本必须是3.1.x(比如3.1.5.RELEASE),如果你的依赖管理文件(pom.xml/gradle)里的版本不匹配,大概率会出现连接或API调用异常,这是很多人踩过的坑。检查ES服务的网络配置
打开ES安装目录下的config/elasticsearch.yml,确认以下配置:network.host:如果Spring项目和ES不在同一机器,需要设置为0.0.0.0允许外部连接;本地测试用localhost也可以。transport.tcp.port:确保是默认的9300(Spring Data Elasticsearch使用TCP端口,而非HTTP的9200)。discovery.zen.ping.unicast.hosts:设置为ES所在机器的IP,比如["127.0.0.1:9300"],避免自动发现节点失败。
完整可参考的配置类示例
给你一个标准的配置模板,你可以对照调整:@Configuration @EnableElasticsearchRepositories(basePackages = "com.abc.portal.City") @ComponentScan(basePackages = {"com.abc.portal.City"}) public class ElasticConfig { @Bean public Client client() throws Exception { Settings settings = Settings.builder() .put("cluster.name", "elasticsearch") // 与ES服务端cluster.name保持一致 .build(); TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); return client; } @Bean public ElasticsearchOperations elasticsearchTemplate() throws Exception { return new ElasticsearchTemplate(client()); } }注:ES 6.x虽已不推荐使用
TransportClient,但Spring Data Elasticsearch 3.1.x仍基于它实现,暂时用这个配置没问题。验证ES服务是否正常启动
运行elasticsearch.bat后,访问http://localhost:9200,如果能返回包含ES版本信息的JSON响应,说明服务已正常启动,排除服务本身的问题。
内容的提问来源于stack exchange,提问作者Błażej Rejnowski
相关产品推荐
相关产品推荐

