基于Springboot2.0構(gòu)建ES的多客戶端
有時(shí)候我們操作es的時(shí)候會(huì)有一些特殊的需求,例如需要操作的index使用了不同的es服務(wù)器、用戶名、密碼、參數(shù)等,這個(gè)時(shí)候我們需要使用不同的es的客戶端進(jìn)行操作,但是我們又不希望拆分成多個(gè)項(xiàng)目進(jìn)行使用,這個(gè)時(shí)候我們就需要在我們的配置中自己構(gòu)建一套ES的多客戶端了。
文章目錄
pom.xml
ElasticsearchConfig.java
ElasticsearchRestClient.java
最終
pom.xml
首先是我們的pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.5.RELEASE</version> </dependency> <!--es for transport--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>5.6.11</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>5.6.11</version> </dependency> <!--es sniffer--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client-sniffer</artifactId> <version>5.6.3</version> <scope>compile</scope> </dependency> <!--es for rest-high-level-client--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>5.6.11</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.39</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency> <!-- SpringBoot 熱啟動(dòng) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client-sniffer</artifactId> <version>5.6.0</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> </dependencies>
ElasticsearchConfig.java
然后是我們的配置文件,我這里使用的是application.properties的配置文件,因?yàn)槲覀兪褂貌煌男畔?,所以這里我就不寫了,可以根據(jù)需求自行獲取。
ElasticsearchRestClient.java
import cnkj.site.config.ElasticsearchConfig;
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.client.config.RequestConfig;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.sniff.SniffOnFailureListener;
import org.elasticsearch.client.sniff.Sniffer;
import org.elasticsearch.client.sniff.SnifferBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*
* @version 1.0 created by LXW on 2018/11/22 9:43
*/
@Slf4j
@Configuration
public class ElasticsearchClient {
@Bean(name = "HighESClient")
public RestClient restTomcatClient(ElasticsearchConfig elasticsearchConfig) {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
//es賬號(hào)密碼
new UsernamePasswordCredentials(elasticsearchConfig.getUsername(), elasticsearchConfig.getPassword()));
//自動(dòng)掃描網(wǎng)段
//監(jiān)聽同網(wǎng)段服務(wù)
//Low Level Client init
RestClientBuilder builder = RestClient.builder(
new HttpHost(
elasticsearchConfig.getHost(),
Integer.valueOf(elasticsearchConfig.getPort()),
elasticsearchConfig.getSchema()
)
).setHttpClientConfigCallback(
httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)
).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {
builder.setConnectTimeout(elasticsearchConfig.getConnectTimeout());
builder.setSocketTimeout(elasticsearchConfig.getSocketTimeout());
return builder;
}
})
.setMaxRetryTimeoutMillis(elasticsearchConfig.getMaxRetryTimeoutMillis());
builder.setMaxRetryTimeoutMillis(elasticsearchConfig.getMaxRetryTimeoutMillis());
SniffOnFailureListener sniffOnFailureListener = new SniffOnFailureListener();
builder.setFailureListener(sniffOnFailureListener);
RestClient lowLevelRestClient = builder.build();
SnifferBuilder snifferBuilder = Sniffer.builder(lowLevelRestClient).setSniffIntervalMillis(elasticsearchConfig.getSnifferinterval());
if (elasticsearchConfig.getFailuredelay() > 0) {
snifferBuilder.setSniffAfterFailureDelayMillis(elasticsearchConfig.getFailuredelay());
}
sniffOnFailureListener.setSniffer(snifferBuilder.build());
return lowLevelRestClient;
}
@Bean(name = "HighLevelESClient")
public RestHighLevelClient restHighLevelClient(@Qualifier("HighESClient") RestClient restClient) {
return new RestHighLevelClient(restClient);
}
}
最終
在需要使用的地方直接通過注入的方式使用不同的客戶端
@Resource(name = "HighLevelESClient") private RestHighLevelClient client;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
windows下使用 intellij idea 編譯 kafka 源碼環(huán)境
這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項(xiàng)目演示,需要的朋友可以參考下2021-10-10
Java基于logback?MessageConverter實(shí)現(xiàn)日志脫敏方案分析
本文介紹了一種日志脫敏方案,即基于logbackMessageConverter和正則匹配的方法,該方法的優(yōu)點(diǎn)是侵入性低,工作量少,只需修改xml配置文件,適用于老項(xiàng)目,感興趣的朋友跟隨小編一起看看吧2024-10-10
詳解Java如何優(yōu)雅的實(shí)現(xiàn)字典翻譯
當(dāng)我們?cè)贘ava應(yīng)用程序中需要對(duì)字典屬性進(jìn)行轉(zhuǎn)換返回給前端時(shí),如何簡(jiǎn)單、方便、并且優(yōu)雅的處理是一個(gè)重要問題。在本文中,我們將介紹如何使用Java中的序列化機(jī)制來優(yōu)雅地實(shí)現(xiàn)字典值的翻譯,從而簡(jiǎn)化開發(fā)2023-04-04
java必學(xué)必會(huì)之方法的重載(overload)
java必學(xué)必會(huì)之方法的重載,介紹了方法的重載、構(gòu)造方法的重載,想要學(xué)好java方法的重載的朋友一定要好好閱讀這篇文章2015-12-12
自帶IDEA插件的阿里開源診斷神器Arthas線上項(xiàng)目BUG調(diào)試
這篇文章主要為大家介紹了自帶IDEA插件阿里開源診斷神器Arthas線上項(xiàng)目BUG調(diào)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
springboot跨域訪問cros與@CrossOrigin注解詳析
這篇文章主要給大家介紹了關(guān)于springboot跨域訪問cros與@CrossOrigin注解的相關(guān)資料,跨域是指不同域名之間相互訪問,它是瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript施加的安全限制,需要的朋友可以參考下2023-12-12
聊聊注解@Aspect的AOP實(shí)現(xiàn)操作
這篇文章主要介紹了聊聊注解@Aspect的AOP實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯(cuò)點(diǎn)、幻讀
這篇文章主要介紹了基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯(cuò)點(diǎn)、幻讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Jedis零基礎(chǔ)入門及操作Redis中的數(shù)據(jù)結(jié)構(gòu)詳解
Jedis 的 API 方法跟 Redis 的命令基本上完全一致,熟悉 Redis 的操作命令,自然就很容易使用 Jedis,因此官方也推薦 Java 使用 Jedis 來連接和操作 Redis2022-09-09

