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

相关推荐
CRMEB系统商城1 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience2 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
weixin_408099672 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
钱六两3 小时前
#3、SpringAI 接入deepSeek大模型(喂饭版)
java·spring boot·ai编程
null_174 小时前
IntelliJ IDEA 极致流畅配置方案:Ultra 9 285K + 64GB 内存实测
java·ide·intellij-idea
Herbert_hwt4 小时前
建立Java程序开发
java·开发语言
好好沉淀4 小时前
@ExcelIgnoreUnannotated 和 @AutoMapper 详解
java
愚公移码5 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
驰骋工作流5 小时前
流程引擎BPM设计之:流程消息
java·工作流引擎·bpm·jflow·ccflow
dogstarhuang5 小时前
从 0 到 1 搭建可收费的 API 开放平台(实战)
java·架构·api