elasticsearch自动装配
![image.png](/uploads/projects/alipaylctk80txoo@pm-cloud/1ff9c277ebaeff932cee1679f938d6ee.png)
package com.np.pm.common.elasticsearch.configure;
import com.np.pm.common.core.utils.ListUtil;
import com.np.pm.common.elasticsearch.properties.RestClientPoolProperties;
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.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientProperties;
import org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
/**
* es自动配置
*
* @author tangxingpeng
* @date 2021/2/22 21:58
*/
@Configuration
@EnableConfigurationProperties(RestClientPoolProperties.class)
public class RestAutoConfigure extends AbstractElasticsearchConfiguration {
@Autowired
private ElasticsearchRestClientProperties properties;
@Bean
public RestClientBuilderCustomizer restClientBuilderCustomizer(RestClientPoolProperties poolProperties
, ElasticsearchRestClientProperties restProperties) {
return (builder) -> {
setRequestConfig(builder, poolProperties);
setHttpClientConfig(builder, poolProperties, restProperties);
};
}
/**
* 异步httpclient连接延时配置
*/
private void setRequestConfig(RestClientBuilder builder, RestClientPoolProperties poolProperties) {
builder.setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder.setConnectTimeout(poolProperties.getConnectTimeOut())
.setSocketTimeout(poolProperties.getSocketTimeOut())
.setConnectionRequestTimeout(poolProperties.getConnectionRequestTimeOut());
return requestConfigBuilder;
});
}
/**
* 异步httpclient连接数配置
*/
private void setHttpClientConfig(RestClientBuilder builder, RestClientPoolProperties poolProperties, ElasticsearchRestClientProperties restProperties) {
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(poolProperties.getMaxConnectNum())
.setMaxConnPerRoute(poolProperties.getMaxConnectPerRoute());
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(restProperties::getUsername).to(username -> {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(username, restProperties.getPassword()));
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
});
return httpClientBuilder;
});
}
@Bean
@ConditionalOnMissingBean
public ElasticsearchRestTemplate elasticsearchRestTemplate(RestHighLevelClient restHighLevelClient) {
return new ElasticsearchRestTemplate(restHighLevelClient);
}
@Override
public RestHighLevelClient elasticsearchClient() {
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(ListUtil.toArray(properties.getUris()))
.withBasicAuth(properties.getUsername(), properties.getPassword())
.build();
return RestClients.create(clientConfiguration).rest();
}
}