Java ElasticsearchTemplate 替换为 ElasticsearchRestTemplat

小小 · 2023年05月09日 · 2053 次阅读

ElasticsearchTemplate 替换为 ElasticsearchRestTemplat
(TransportClient 替换为 RestHighLevelClient)

ES 添加认证(鉴权)后,原先配置文件(application.properties)需要做些改动,试了一些在配置文件中增加 spring.elasticsearch.rest.xxx、spring.elasticsearch.jest.xxx 或 spring.data.elasticsearch.client.reactive.xxx 均不行。而且这里采用的是 http 请求,原先未认证使用的是 tcp 方式,

如果不改为 http 方式仍为 tcp 有个方法,使用 spring TransportClient 可以参考在配置文件添加如下:

spring.data.elasticsearch.cluster-name=xx
spring.data.elasticsearch.cluster-nodes=nodes.xxx.com:9300
spring.data.elasticsearch.properties[request.headers.Authorization]=Basic ${auth}
${auth}=base64(user:password)

该方法未实际验证。

pom 文件保持原先,不用改动,多啰嗦下,这里 org.springframework.boot 使用版本为 2.2.2.RELEASE,spring-boot-starter-data-elasticsearch 是跟着这个版本的,未单独设置,需要注意的是 org.elasticsearch 版本(6.8.5)要大于等于 ES 服务版本(6.7.0),

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

另种方法,是使用 RestHighLevelClient
1、pom 文件需要把 TransportClient 排除掉,以防还是走这个方式;

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <exclusions>
                    <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>transport</artifactId>
                </exclusion>
            </exclusions>
</dependency>

2、配置文件 application.properties 中添加字段

elasticsearch.gatewayIpPorts=xxxx:9200
elasticsearch.username=xxx
elasticsearch.password=xxx

3、添加配置类 RestClientConfig.java

import java.time.Duration;
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 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;

@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {

    @Value(value = "${elasticsearch.gatewayIpPorts}")

    private String gatewayIpPorts;

    @Value(value = "${elasticsearch.username}")

    private String username;

    @Value(value = "${elasticsearch.password}")

    private String password;

    @Override

    @Bean

    public RestHighLevelClient elasticsearchClient() {

        // 使用构建器来提供集群地址,设置默认值HttpHeaders或启用SSL

        ClientConfiguration clientConfiguration = ClientConfiguration.builder()

                // 设置连接地址

                .connectedTo(gatewayIpPorts)

                // 可以设置多个地址

                // .connectedTo("127.0.0.1:9200", "127.0.0.1:9201")

                // 是否启用ssl

                // .usingSsl()

                // 设置连接超时时间

                .withConnectTimeout(Duration.ofSeconds(10))

                // 设置

                .withSocketTimeout(Duration.ofSeconds(30))

                // 设置用户名密码

                .withBasicAuth(username, password)

                // 创建连接信息

                .build();

        // 创建RestHighLevelClient

        return RestClients.create(clientConfiguration).rest();

    }

    @Bean
    public ElasticsearchRestTemplate restTemplate() throws Exception {
        return new ElasticsearchRestTemplate(elasticsearchClient());
    }

}

4、涉及到 ElasticsearchTemplate elasticsearchTemplate;需要改为 ElasticsearchRestTemplate elasticsearchTemplate;
注意:elasticsearchTemplate 不用修改。
通过以上步骤已完成替换,之前相关的 es 操作写法不会受到影响。

暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册