Elasticsearch系列-基础篇(二):Springboot整合Java High Level REST Client

软件版本

springboot 版本 2.1.7
elasticsearch版本 6.3.1

pom文件中引入依赖

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!-- springBoot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.3.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>elasticsearch-rest-client</artifactId>
                    <groupId>org.elasticsearch.client</groupId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <artifactId>elasticsearch-rest-client</artifactId>
            <groupId>org.elasticsearch.client</groupId>
            <version>6.3.1</version>
        </dependency>

        <dependency>
            <artifactId>elasticsearch</artifactId>
            <groupId>org.elasticsearch</groupId>
            <version>6.3.1</version>
        </dependency>

    </dependencies>

application.yml文件配置

es:
  userName: elastic
  passwd: UhPkKXbAdL6wZA1Bdzju
  hosts: 192.168.0.1:9200,192.168.0.2:9200,192.168.0.3:9200

Client 封装

package com.example.demo;

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.apache.http.impl.nio.reactor.IOReactorConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;

@Configuration
public class RestClientFactory {

    @Value("${es.userName}")
    private String userName;

    @Value("${es.passwd}")
    private String password;

    @Value("${es.hosts}")
    private String hosts;

    @Bean
    public RestHighLevelClient restClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));

        HttpHost[] httpHosts = Arrays.stream(hosts.split(",")).map(x -> {
            String[] hostInfo = x.split(":");
            return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
        }).toArray(HttpHost[]::new);
        RestClientBuilder restClientBuilder = RestClient.builder(httpHosts);

        // 设置连接超时、读取超时、请求超时时间
        restClientBuilder.setRequestConfigCallback(requestConfigBuilder -> {
            requestConfigBuilder.setConnectTimeout(10000);
            requestConfigBuilder.setSocketTimeout(30000);
            requestConfigBuilder.setConnectionRequestTimeout(10000);
            return requestConfigBuilder;
        });

        // 设置访问es的用户名密码、线程配置
        restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder
                    // 设置用户名密码
                    .setDefaultCredentialsProvider(credentialsProvider)
                    // 配置IO线程
                    .setDefaultIOReactorConfig(IOReactorConfig.custom()
                            .setIoThreadCount(200)
                            .setSoTimeout(10000)
                            .setConnectTimeout(10000)
                            .build()
                    );
            return httpClientBuilder;
        });
        return new RestHighLevelClient(restClientBuilder);
    }
}

测试

package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

@Slf4j
@Service("esService")
public class EsServiceImpl implements EsServiceI {

    @Resource
    private RestHighLevelClient restClient;

    @Override
    public void esApiTest() {
        try {
            GetRequest request = new GetRequest("zhitongche_audio", "audio", "1");
            GetResponse response = restClient.get(request);
            System.out.println(response.getSourceAsString());
        } catch (Exception e) {
            log.error("Exception Info: {}", e);
        }
    }

    @PostConstruct
    public void init() {
        esApiTest();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、SpringBoot简介 1.1 原有Spring优缺点分析 1.1.1 Spring的优点分析 Sprin...
    SingleXu阅读 9,772评论 1 20
  • SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解S...
    dwwl阅读 10,766评论 4 81
  • https://github.com/cuzz1/springboot-learning 一、Spring Boo...
    cuzz_阅读 8,706评论 1 6
  • SpringMVC原理分析 Spring Boot学习 5、Hello World探究 1、POM文件 1、父项目...
    jack_jerry阅读 5,208评论 0 1
  • 我们应该有七个年头没见面了吧?那时候,我们都还在老家。 现在想起来,我真的记不太清楚当时分别的样子,直到去年看见你...
    拉小姐阅读 3,255评论 2 0