ElasticSearchConfig.java
3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.idss.vulsync.config;
import cn.hutool.core.collection.ListUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zc
* @Date: 2021/11/19 14:06
*/
@Configuration
@Slf4j
public class ElasticSearchConfig {
private List<HttpHost> httpHosts = new ArrayList<>();
/**
* elk集群地址
*/
@Value("${spring.data.elasticsearch.cluster-hosts}")
private String hostName;
/**
* 用户
*/
@Value("${spring.data.elasticsearch.userName}")
private String username;
/**
* 密码
*/
@Value("${spring.data.elasticsearch.password}")
private String password;
// /**
// * 连接池
// */
// @Value("${elasticsearch.pool}")
// private String poolSize;
public static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder=RequestOptions.DEFAULT.toBuilder();
COMMON_OPTIONS=builder.build();
}
/**
* 防止netty的bug
* java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
*/
@PostConstruct
void init() {
System.setProperty("es.set.netty.runtime.available.processors", "false");
}
@Bean
public RestHighLevelClient restHighLevelClient() {
String[] hosts = hostName.split(",");
for (String host : hosts) {
String[] hostStr = host.split(":");
httpHosts.add(new HttpHost(hostStr[0], Integer.parseInt(hostStr[1]), "http"));
}
RestClientBuilder builder = RestClient.builder(httpHosts.toArray(new HttpHost[0]));
RestHighLevelClient restHighLevelClient=getRestHighLevelClient(builder);
return restHighLevelClient;
}
/**
* get restHistLevelClient
*
* @return
*/
private RestHighLevelClient getRestHighLevelClient(RestClientBuilder builder) {
// Callback used the default {@link RequestConfig} being set to the {@link CloseableHttpClient}
builder.setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder.setConnectTimeout(1000);
requestConfigBuilder.setSocketTimeout(30000);
requestConfigBuilder.setConnectionRequestTimeout(500);
return requestConfigBuilder;
});
// Callback used to customize the {@link CloseableHttpClient} instance used by a {@link RestClient} instance.
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(30);
httpClientBuilder.setMaxConnPerRoute(10);
// Callback used the basic credential auth
if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
return httpClientBuilder;
});
return new RestHighLevelClient(builder);
}
}