elasticsearch自动装配

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(); }}