elasticsearch自动装配

image.png

  1. package com.np.pm.common.elasticsearch.configure;
  2. import com.np.pm.common.core.utils.ListUtil;
  3. import com.np.pm.common.elasticsearch.properties.RestClientPoolProperties;
  4. import org.apache.http.auth.AuthScope;
  5. import org.apache.http.auth.UsernamePasswordCredentials;
  6. import org.apache.http.client.CredentialsProvider;
  7. import org.apache.http.impl.client.BasicCredentialsProvider;
  8. import org.elasticsearch.client.RestClientBuilder;
  9. import org.elasticsearch.client.RestHighLevelClient;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  12. import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientProperties;
  13. import org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer;
  14. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  15. import org.springframework.boot.context.properties.PropertyMapper;
  16. import org.springframework.context.annotation.Bean;
  17. import org.springframework.context.annotation.Configuration;
  18. import org.springframework.data.elasticsearch.client.ClientConfiguration;
  19. import org.springframework.data.elasticsearch.client.RestClients;
  20. import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
  21. import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
  22. /**
  23. * es自动配置
  24. *
  25. * @author tangxingpeng
  26. * @date 2021/2/22 21:58
  27. */
  28. @Configuration
  29. @EnableConfigurationProperties(RestClientPoolProperties.class)
  30. public class RestAutoConfigure extends AbstractElasticsearchConfiguration {
  31. @Autowired
  32. private ElasticsearchRestClientProperties properties;
  33. @Bean
  34. public RestClientBuilderCustomizer restClientBuilderCustomizer(RestClientPoolProperties poolProperties
  35. , ElasticsearchRestClientProperties restProperties) {
  36. return (builder) -> {
  37. setRequestConfig(builder, poolProperties);
  38. setHttpClientConfig(builder, poolProperties, restProperties);
  39. };
  40. }
  41. /**
  42. * 异步httpclient连接延时配置
  43. */
  44. private void setRequestConfig(RestClientBuilder builder, RestClientPoolProperties poolProperties) {
  45. builder.setRequestConfigCallback(requestConfigBuilder -> {
  46. requestConfigBuilder.setConnectTimeout(poolProperties.getConnectTimeOut())
  47. .setSocketTimeout(poolProperties.getSocketTimeOut())
  48. .setConnectionRequestTimeout(poolProperties.getConnectionRequestTimeOut());
  49. return requestConfigBuilder;
  50. });
  51. }
  52. /**
  53. * 异步httpclient连接数配置
  54. */
  55. private void setHttpClientConfig(RestClientBuilder builder, RestClientPoolProperties poolProperties, ElasticsearchRestClientProperties restProperties) {
  56. builder.setHttpClientConfigCallback(httpClientBuilder -> {
  57. httpClientBuilder.setMaxConnTotal(poolProperties.getMaxConnectNum())
  58. .setMaxConnPerRoute(poolProperties.getMaxConnectPerRoute());
  59. PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
  60. map.from(restProperties::getUsername).to(username -> {
  61. CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  62. credentialsProvider.setCredentials(AuthScope.ANY,
  63. new UsernamePasswordCredentials(username, restProperties.getPassword()));
  64. httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
  65. });
  66. return httpClientBuilder;
  67. });
  68. }
  69. @Bean
  70. @ConditionalOnMissingBean
  71. public ElasticsearchRestTemplate elasticsearchRestTemplate(RestHighLevelClient restHighLevelClient) {
  72. return new ElasticsearchRestTemplate(restHighLevelClient);
  73. }
  74. @Override
  75. public RestHighLevelClient elasticsearchClient() {
  76. final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
  77. .connectedTo(ListUtil.toArray(properties.getUris()))
  78. .withBasicAuth(properties.getUsername(), properties.getPassword())
  79. .build();
  80. return RestClients.create(clientConfiguration).rest();
  81. }
  82. }