94 lines
3.0 KiB
Java
94 lines
3.0 KiB
Java
|
|
package com.zcloud.config;
|
|||
|
|
|
|||
|
|
import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient;
|
|||
|
|
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 lombok.Data;
|
|||
|
|
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.springframework.boot.context.properties.ConfigurationProperties;
|
|||
|
|
import org.springframework.context.annotation.Bean;
|
|||
|
|
import org.springframework.context.annotation.Configuration;
|
|||
|
|
|
|||
|
|
|
|||
|
|
@Configuration
|
|||
|
|
@ConfigurationProperties(prefix = "elasticsearch")
|
|||
|
|
@Data
|
|||
|
|
public class ElasticsearchConfiguration {
|
|||
|
|
private String host;
|
|||
|
|
private int port;
|
|||
|
|
private String username;
|
|||
|
|
private String password;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 解析配置的字符串,转为HttpHost对象数组
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private HttpHost toHttpHost() {
|
|||
|
|
HttpHost httpHost = new HttpHost(host, port, "http");
|
|||
|
|
return httpHost;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 同步客户端
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* @throws Exception
|
|||
|
|
*/
|
|||
|
|
@Bean
|
|||
|
|
public ElasticsearchClient clientBySync() throws Exception {
|
|||
|
|
ElasticsearchTransport transport = getElasticsearchTransport(username, password, toHttpHost());
|
|||
|
|
return new ElasticsearchClient(transport);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 异步客户端
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* @throws Exception
|
|||
|
|
*/
|
|||
|
|
@Bean
|
|||
|
|
public ElasticsearchAsyncClient clientByAsync() throws Exception {
|
|||
|
|
ElasticsearchTransport transport = getElasticsearchTransport(username, password, toHttpHost());
|
|||
|
|
return new ElasticsearchAsyncClient(transport);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 传输对象
|
|||
|
|
*
|
|||
|
|
* @return
|
|||
|
|
* @throws Exception
|
|||
|
|
*/
|
|||
|
|
@Bean
|
|||
|
|
public ElasticsearchTransport getTransport() throws Exception {
|
|||
|
|
return getElasticsearchTransport(username, password, toHttpHost());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private static ElasticsearchTransport getElasticsearchTransport(String username, String passwd, HttpHost... hosts) {
|
|||
|
|
// 账号密码的配置
|
|||
|
|
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
|||
|
|
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, passwd));
|
|||
|
|
|
|||
|
|
RestClientBuilder.HttpClientConfigCallback callback = httpAsyncClientBuilder -> httpAsyncClientBuilder
|
|||
|
|
.setDefaultCredentialsProvider(credentialsProvider);
|
|||
|
|
|
|||
|
|
// 用builder创建RestClient对象
|
|||
|
|
RestClient client = RestClient
|
|||
|
|
.builder(hosts)
|
|||
|
|
.setHttpClientConfigCallback(callback)
|
|||
|
|
.build();
|
|||
|
|
return new RestClientTransport(client, new JacksonJsonpMapper());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|