Elasticsearch教程---Springboot2.x中使用High Level REST Client配置(五)

本文介绍如何在SpringBoot2.x项目中使用HighLevelRESTClient操作Elasticsearch,包括Maven配置、配置文件设置及ES配置类实现。由于TransportClient将在Elasticsearch 8.0版本中移除,故采用HighLevelRESTClient替代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章 Springboot2.x中使用High Level REST Client

注意:以后章节的讲课都通过API操作与kibana查看操作结果的方式来演示。

Elasticsearch 会在7.0之后的版本废弃TransportClient,在8.0之后的版本移除TransportClient (文档)。因此,使用RestClient来进行相关的操作。

We plan on deprecating the TransportClient in Elasticsearch 7.0 and removing it completely in 8.0. Instead, you should be using the Java High Level REST Client, which executes HTTP requests rather than serialized Java requests. The migration guidedescribes all the steps needed to migrate.

取而代之的是High Level REST Client。

后续的JAVA API使用我们都是使用的High Level REST Client。

7.1 maven配置

新建SpringBoot2.0.3的WEB工程,在MAVEN的pom.xml文件中加入如下依赖

pom文件:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

7.2 配置文件配置

application.properties针对ES配置示例如下:

#日志
logging.path=D:/logs/cache
#es 配置信息
spring.data.elasticsearch.host=192.168.157.140
spring.data.elasticsearch.port=9200
spring.data.elasticsearch.connectTimeOut=1000
spring.data.elasticsearch.socketTimeOut=30000
spring.data.elasticsearch.connectionRequestTimeOut=500
spring.data.elasticsearch.maxConnectNum=100
spring.data.elasticsearch.maxConnectPerRoute=100

7.3 ES配置类

package com.javablog.elasticsearch.config;

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;

@Configuration
public class ElasticsearchConfig {
    private final static Logger log = LoggerFactory.getLogger(ElasticsearchConfig.class);
    private static final String SCHEMA = "http"; // 使用的协议
    private  ArrayList<HttpHost> hostList;
    @Value("${spring.data.elasticsearch.host}")
    private String hosts; // 集群地址,多个用,隔开
    @Value("${spring.data.elasticsearch.port}")
    private int port; // 集群地址,多个用,隔开
    @Value("${spring.data.elasticsearch.connectTimeOut}")
    private int connectTimeOut = 1000; // 连接超时时间
    @Value("${spring.data.elasticsearch.socketTimeOut}")
    private int socketTimeOut = 30000; // 连接超时时间
    @Value("${spring.data.elasticsearch.connectionRequestTimeOut}")
    private int connectionRequestTimeOut = 500; // 获取连接的超时时间
    @Value("${spring.data.elasticsearch.maxConnectNum}")
    private int maxConnectNum = 100; // 最大连接数
    @Value("${spring.data.elasticsearch.maxConnectPerRoute}")
    private int maxConnectPerRoute = 100; // 最大路由连接数
    private RestClientBuilder builder;

    @Bean
    @ConditionalOnMissingBean(RestHighLevelClient.class)
    public RestHighLevelClient client() {
        hostList = new ArrayList<>();
        String[] hostStrs = hosts.split(",");
        for (String host : hostStrs) {
            String server = host;
            hostList.add(new HttpHost(host, port , SCHEMA));
        }
        builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
        setConnectTimeOutConfig();
        setMutiConnectConfig();
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }

    // 异步httpclient的连接延时配置
    public void setConnectTimeOutConfig() {
        builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                requestConfigBuilder.setConnectTimeout(connectTimeOut);
                requestConfigBuilder.setSocketTimeout(socketTimeOut);
                requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
                return requestConfigBuilder;
            }
        });
    }

    // 异步httpclient的连接数配置
    public void setMutiConnectConfig() {
        builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.setMaxConnTotal(maxConnectNum);
                httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
                return httpClientBuilder;
            }
        });
    }

}

完整代码:https://github.com/chutianmen/elasticsearch-examples

### Elasticsearch Rest High Level Client 8.17.2 使用指南 #### 添加Maven依赖 对于Elasticsearch 8.17.2版本,官方推荐使用`elasticsearch-java`作为客户端库来替代已弃用的`elasticsearch-rest-high-level-client`[^1]。因此,在构建工具配置文件中应加入如下依赖: ```xml <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>8.17.2</version> </dependency> ``` 请注意,上述依赖适用于Elasticsearch 8.x系列的新版API。 #### 初始化客户端实例 为了初始化一个新的Elasticsearch Java API客户端对象,可以通过下面的方式完成设置: ```java // 构建传输选项并启用请求警告日志记录 var transportOptions = new TransportOptions(); transportOptions.setRequestConfigCallback( builder -> builder.setConnectTimeout(5000) .setSocketTimeout(60_000)); // 创建低级REST客户端 RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build(); // 基于低级REST客户端创建高级Java API客户端 ElasticsearchClient client = new ElasticsearchClient(restClient); ``` 这段代码展示了如何通过指定主机地址建立与Elasticsearch服务器之间的连接,并设置了合理的超时参数以确保稳定通信[^4]。 #### 执行基本操作 一旦成功建立了客户端链接,则可执行诸如索引管理、文档增删改查等一系列常规命令。例如,要创建新索引,可以采用以下方法实现: ```java CreateIndexRequest createIndexRequest = CreateIndexRequest.of(c -> c.index("my-index") ); try { CreateIndexResponse response = client.indices().create(createIndexRequest); } catch (IOException e) { throw new RuntimeException(e); } ``` 此段程序片段说明了怎样利用Java API发出创建特定名称索引(`my-index`)的操作指令。 #### 关闭资源 当不再需要继续访问集群时,应当妥善释放所占用的各项资源: ```java client.close(); // 关闭高级Java API客户端 restClient.close(); // 关闭底层REST客户端 ``` 这一步骤非常重要,因为它有助于防止潜在内存泄漏问题的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值