文章目录

  • 1. SpringBoot 项目
  • 2. 普通 Maven 项目

1. SpringBoot 项目

首先在 pom.xml 中添加 ES 客户端依赖,这里 SpringBoot 使用的是 2.5.3 版本,默认会引入 ES 7.12.1 版本客户端,所以这里没有写版本号:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

在 application.properties 配置文件中添加相关 ES 集群连接信息:

#ES集群1连接
elasticsearch.connect1.hosts=192.168.50.16:9200,192.168.50.17:9200,192.168.50.18:9200
elasticsearch.connect1.username=test
elasticsearch.connect1.password=12345
#ES集群2连接
elasticsearch.connect2.hosts=192.168.50.40:9200
elasticsearch.connect2.username=test
elasticsearch.connect2.password=12345

提供一个配置类:

import lombok.Getter;
import lombok.Setter;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** ES集群配置*/
@Setter
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticsearchConfig {public static final String ES_CLIENT_1 = "es_client_1";public static final String ES_CLIENT_2 = "es_client_2";private Connect connect1;private Connect connect2;/*** 客户端1*/@Bean(name = ES_CLIENT_1, destroyMethod = "close")public RestHighLevelClient restHighLevelClient1() {return getRestHighLevelClient(connect1);}/*** 客户端2*/@Bean(name = ES_CLIENT_2, destroyMethod = "close")public RestHighLevelClient restHighLevelClient2() {return getRestHighLevelClient(connect2);}private RestHighLevelClient getRestHighLevelClient(Connect connect) {String[] hosts = connect.getHosts().split(",");HttpHost[] httpHosts = new HttpHost[hosts.length];for (int i = 0; i < hosts.length; i++) {httpHosts[i] = HttpHost.create(hosts[i]);}RestClientBuilder restClientBuilder = RestClient.builder(httpHosts);//配置身份验证final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(connect.getUsername(), connect.getPassword()));restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));return new RestHighLevelClient(restClientBuilder);}@Setter@Getterpublic static class Connect {private String hosts;private String username;private String password;}}

使用方法示例:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;@Slf4j
@Service
public class SearchServiceImpl implements SearchService {@Autowired@Qualifier(ElasticsearchConfig.ES_CLIENT_1)private RestHighLevelClient esClient1;@Autowired@Qualifier(ElasticsearchConfig.ES_CLIENT_2)private RestHighLevelClient esClient2;}

2. 普通 Maven 项目

提供一个 elasticsearch.properties 配置文件,添加相关 ES 集群连接信息:

#新闻ES集群
elasticsearch.news.hosts=192.168.50.16:9200,192.168.50.17:9200,192.168.50.18:9200
elasticsearch.news.username=test
elasticsearch.news.password=12345
#社交ES集群
elasticsearch.social.hosts=192.168.50.40:9200
elasticsearch.social.username=test
elasticsearch.social.password=12345

提供一个配置类:

import com.gtcom.constant.Constants;
import com.gtcom.constant.Separators;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;import java.io.IOException;
import java.util.Properties;/*** ES集群配置*/
@Slf4j
public class ElasticsearchConfig {@Setterprivate static Connect newsConnect = new Connect();@Setterprivate static Connect socialConnect = new Connect();private static volatile RestHighLevelClient newsEsClient;private static volatile RestHighLevelClient socialEsClient;private static final byte[] NEWS_LOCK = new byte[Constants.ZERO];private static final byte[] SOCIAL_LOCK = new byte[Constants.ZERO];static {Properties props = new Properties();try {props.load(ElasticsearchConfig.class.getResourceAsStream("/elasticsearch.properties"));} catch (IOException e) {log.error("load elasticsearch config properties exception", e);}String newsHost = props.getProperty("elasticsearch.news.hosts");String newsUserName = props.getProperty("elasticsearch.news.username");String newsPassword = props.getProperty("elasticsearch.news.password");newsConnect.setHosts(newsHost);newsConnect.setUsername(newsUserName);newsConnect.setPassword(newsPassword);newsEsClient = init(newsConnect);String socialHost = props.getProperty("elasticsearch.social.hosts");String socialUserName = props.getProperty("elasticsearch.social.username");String socialPassword = props.getProperty("elasticsearch.social.password");socialConnect.setHosts(socialHost);socialConnect.setUsername(socialUserName);socialConnect.setPassword(socialPassword);socialEsClient = init(socialConnect);}/*** 初始化客户端*/private static RestHighLevelClient init(Connect connect) {String[] hosts = connect.getHosts().split(Separators.COMMA);HttpHost[] httpHosts = new HttpHost[hosts.length];for (int i = Constants.ZERO; i < hosts.length; i++) {httpHosts[i] = HttpHost.create(hosts[i]);}RestClientBuilder restClientBuilder = RestClient.builder(httpHosts);//配置身份验证final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(connect.getUsername(), connect.getPassword()));restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));return new RestHighLevelClient(restClientBuilder);}@Setter@Getterpublic static class Connect {private String hosts;private String username;private String password;}/*** 获取新闻ES集群客户端*/public static RestHighLevelClient getNewsEsClient() {if (newsEsClient == null) {synchronized (NEWS_LOCK) {if (newsEsClient == null) {newsEsClient = init(newsConnect);return newsEsClient;}}}return newsEsClient;}/*** 获取社交ES集群客户端*/public static RestHighLevelClient getSocialEsClient() {if (socialEsClient == null) {synchronized (SOCIAL_LOCK) {if (socialEsClient == null) {socialEsClient = init(socialConnect);return socialEsClient;}}}return socialEsClient;}}

使用的话可以直接通过配置类中提供的单例方法获取客户端:

RestHighLevelClient newsEsClient = ElasticsearchConfig.getNewsEsClient();
RestHighLevelClient socialEsClient = ElasticsearchConfig.getSocialEsClient();

SpringBoot 配置多个 Elasticsearch 集群相关推荐

  1. ECK安装elasticsearch集群及es配置x-pack

    目录 ECK安装elasticsearch集群 elasticsearch安装x-pack插件 Elasticsearch Springboot 开发 ECK安装elasticsearch集群 ECK ...

  2. elasticsearch 集群搭建 + kibana配置

    elasticsearch 集群搭建 + kibana配置 一.elasticsearch 集群搭建 1.下载并解压elasticsearch 2.ES集群搭建 2.1 打开防火墙9200,9300端 ...

  3. ElasticSearch(八):springboot集成ElasticSearch集群并使用

    1. 集群的搭建 见:ElasticSearch(七) 2. springboot配置集群 2.1 创建springboot项目,使用idea创建,不过多介绍(创建项目时候建议不要勾选elastics ...

  4. elasticsearch集群搭建及springboot集成使用

    elasticsearch集群搭建及springboot集成使用 1. ES介绍 2. 原理 2.1 核心概念 2.2 索引功能 2.3 ES特性 3. 分词器(analyzer) 4. 集群搭建 4 ...

  5. 七、SpringBoot整合elasticsearch集群

    @Author : By Runsen @Date : 2020/6/12 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  6. Elasticsearch集群节点配置详解

    注意:如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群. 三.配置浅涉 elasticse ...

  7. Elasticsearch集群配置以及REST API使用

    ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并 ...

  8. Elasticsearch集群配置

    Elasticsearch集群 配置 报错 集群状态查看 启动 配置 cluster.name: es node.name: node-3 path.data: /home/elasticsearch ...

  9. Elasticsearch集群传输层安全配置

    传输层安全配置以最低安全要求为基础(用户名和密码),通过安装证书来验证集群中的节点,以防止未经授权的节点加入你的 Elasticsearch 集群. 生成证书 官方提供了一个在 bin 目录下叫做 e ...

最新文章

  1. C言语选择排序算法及代码
  2. python语言基础-详细的总结一下python入门基础语言知识!
  3. c语言 ctype,C语言标准库系列之 -
  4. 【MVC模式】Front前端控制器模式、Jsp Model1 和 Jsp Model2、MVC思想
  5. 前端学习(2529):搭建中央管理
  6. 那些年我们追过的网络库(PartI)
  7. ubuntu 安装 mono报错 E: Unable to correct problems, you have held broken packages.
  8. Linux下Socket网络编程send和recv使用注意事项
  9. 使用netcat的正向 / 反向shell
  10. 4. 卷2(进程间通信)---管道和FIFO
  11. 城市土地利用分布数据/城市功能区划分布数据/城市poi感兴趣点/植被类型分布
  12. 等差素数列(java)
  13. 微信小程序:2022虎年全新头像框制作
  14. 杀戮尖塔用java也打不开_游戏进不去 打不开 求救
  15. 高德地图api调用demo_高德地图定位如何调用api?
  16. Java中的gvm_深入浅出GVM之GC
  17. 介绍一下3D游戏开发的简单常识,以及最终幻想13游戏流程为什么会过于线性的原因。
  18. 使用idea将dev分支合并到master分支
  19. 2018云南-华为软件产业峰会成功举办 加快构建数字中国
  20. 浙大版《python程序设计》第四章课后习题

热门文章

  1. javapython学习教程_Java入门教程
  2. OV5640摄像头配置(1)上电复位配置
  3. HTML5 新点总结-持续
  4. 产品思考 - 程序猿实际上性价比比较低
  5. 基础十三:面向对象二
  6. Hbase理论与操作
  7. java算法《丢硬币、最近点对》
  8. Java设计模式之适配器模式(属于结构型模式)
  9. 苏州企业申报2019年高新企业如何加分?
  10. tableau高级绘图(三)-tableau绘制王者荣耀人物关系图