java操作ES(一)RestHighLevelClient(2)集成与demo

一、集成方法

1、pom依赖
复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.x.x</version> <!-- 请使用与你的Elasticsearch版本相匹配的版本 -->
</dependency>
2、配置文件
复制代码
demo.es.active=true
demo.es.hosts= xxx.xx.xxx.xx
demo.es.path-prefix=xxx
demo.es.connect-timeout=5000
demo.es.socket-timeout=10000
demo.es.max-conn-total=100
demo.es.max-conn-per-route=100
3、javaBean配置
复制代码
@Slf4j
@Configuration
@ConditionalOnExpression("${demo.es.active:false}")
public class RestHighLevelClientConfig {

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

    @Value("${demo.es.connect-timeout}")
    private int connectTimeout;

    @Value("${demo.es.socket-timeout}")
    private int socketTimeout;

    @Value("${demo.es.max-conn-total}")
    private int maxConnTotal;

    @Value("${demo.es.max-conn-per-route}")
    private int maxConnPerRoute;

    @Value("${demo.es.path-prefix}")
    private String pathPrefix;

    @Bean("restHighLevelClient")
    public RestHighLevelClient getRestHighLevelClient() {
        RestClientBuilder builder = RestClient.builder(resolveHosts(hosts));
        builder.setHttpClientConfigCallback(
                httpClientBuilder -> {
                    
                    httpClientBuilder.setSSLHostnameVerifier((hostname, session) -> {
                        try {
                            URL url = new URL(hosts);
                            return hostname.equalsIgnoreCase(url.getHost());
                        } catch (MalformedURLException | RuntimeException e) {
                            return false;
                        }
                    });
                    httpClientBuilder.setMaxConnTotal(maxConnTotal);
                    httpClientBuilder.setMaxConnPerRoute(maxConnPerRoute);
                    httpClientBuilder.setSSLContext(getSSLContext());
                    return httpClientBuilder;
                });

        builder.setPathPrefix(pathPrefix);
        builder.setRequestConfigCallback(
                requestConfigBuilder ->
                        requestConfigBuilder
                                .setConnectTimeout(connectTimeout)
                                .setSocketTimeout(socketTimeout));

        return new RestHighLevelClient(builder);
    }

    private HttpHost[] resolveHosts(String hosts) {
        if (StringUtils.isBlank(hosts)) {
            return new HttpHost[0];
        }
        return Arrays.stream(StringUtils.split(hosts, ","))
                .filter(StringUtils::isNotBlank)
                .map(HttpHost::create)
                .toArray(HttpHost[]::new);
    }

    private SSLContext getSSLContext() {
        return SSLContexts.createDefault();
    }
}
4、使用

代码中直接注入RestHighLevelClient 使用即可。

复制代码
@Autowired 
private RestHighLevelClient restHighLevelClient;

二、demo

相关推荐
暹罗软件开发19 小时前
快速搭建分布式链路追踪系统:SkyWalking全攻略
java·skywalking
.格子衫.19 小时前
Maven中的配置
java·maven
L.EscaRC20 小时前
Spring Boot 自定义组件深度解析
java·spring boot·后端
pengzhuofan20 小时前
IntelliJ IDEA 常用快捷键
java·ide·intellij-idea
ANGLAL20 小时前
17.MyBatis动态SQL语法整理
java·sql·mybatis
SheepHappy20 小时前
MyBatis-Plus 源码阅读(二)代码生成器原理深度剖析
java·源码阅读
雨白21 小时前
重识 Java IO、NIO 与 OkIO
android·java
light_in_hand21 小时前
内存区域划分——垃圾回收
java·jvm·算法
金銀銅鐵21 小时前
[Java] JDK 9 新变化之 Convenience Factory Methods for Collections
java·后端