千萬萬苦利用科學(xué)上網(wǎng)找到了,記錄一下文章來源地址http://www.zghlxwxcb.cn/news/detail-697447.html
package com.warn.config.baseconfig;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.common.util.text.Convert;
import com.warn.entity.SettingVar;
import com.warn.mapper.SettingVarMapper;
import com.warn.util.EncryptUtil;
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.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import java.io.File;
/**
* @author fjl
* @date 2022/5/6
*/
@Slf4j
@Configuration
public class ElasticSearchClientConfig {
@Resource
private SettingVarMapper varMapper;
@Value("${es.connectTimeout}")
private Integer connectTimeout;
@Value("${es.socketTimeout}")
private Integer socketTimeout;
private static final Integer ES_ID = 30;
@Value("${filePath}")
private String filePath;
private static String esInfo = "esInfo.txt";
public static String esUrl;
public static Integer esPort;
public static String esAccount;
public static String esPassword;
//配置RestHighLevelClient依賴到spring容器中待用
@Bean
public ElasticsearchClient restHighLevelClient() throws Exception {
log.info("--- 初始化es鏈接開始 --- ");
EncryptUtil.checkFileExist(filePath);
String esFilePath = filePath + esInfo;
File esFile = new File(esFilePath);
boolean esExists = esFile.exists();
log.info("--- 檢查es地址文件是否存在 --- {} esPath:{} ", esExists, esFilePath);
if (!esExists) {
// 獲取es地址
LambdaQueryWrapper<SettingVar> wrapper = new LambdaQueryWrapper<SettingVar>()
.eq(SettingVar::getId, ES_ID)
.select(SettingVar::getValue);
SettingVar settingVar = varMapper.selectOne(wrapper);
if (null != settingVar) {
log.info("--- es地址信息 {}", settingVar.getValue());
String value = settingVar.getValue();
getEsAddr(value);
// 創(chuàng)建文件并寫入
EncryptUtil.createFile(esFilePath, value);
}
} else {
// 存在讀取賦值
String value = EncryptUtil.readLine(esFilePath);
getEsAddr(value);
log.info("*** es地址讀取完成 --- {} ", value);
}
try {
CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(esAccount, esPassword));
SSLContextBuilder sslBuilder = SSLContexts.custom()
.loadTrustMaterial(null, (x509Certificates, s) -> true);
final SSLContext sslContext = sslBuilder.build();
RestClientBuilder restBuilder = RestClient.builder(
new HttpHost(esUrl, esPort, "https"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder
.setSSLContext(sslContext)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setDefaultCredentialsProvider(credentialsProvider);
}
})
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(
RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectTimeout(5000)
.setSocketTimeout(120000);
}
});
RestClient restClient = restBuilder.build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
ElasticsearchClient client = new ElasticsearchClient(transport);
log.info("*** 初始化es鏈接完成 *** ");
return client;
} catch (Exception e) {
throw new Exception("****** es初始化連接失敗");
}
}
public void getEsAddr(String value) {
JSONObject jsonObject = JSONObject.parseObject(value);
String url = com.common.util.text.Convert.toStr(jsonObject.get("addr"));
int port = com.common.util.text.Convert.toInt(jsonObject.get("port"));
String account = com.common.util.text.Convert.toStr(jsonObject.get("account"));
String password = Convert.toStr(jsonObject.get("password"));
esUrl = url;
esPort = port;
esAccount = account;
esPassword = password;
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-697447.html
到了這里,關(guān)于springboot集成Elasticsearch7.16,使用https方式連接并忽略SSL證書的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!