Springboot 项目配置了 elasticsearch-java 之后,启动莫名其妙报错 Elasticsearch health check failed。网上一搜了一堆都是要在配置文件里额外配置上 uri 的。试了发现也不行,事后看下来估计那个 uri 在早期的版本里可能可以自动装配 RestClient 吧,也有可能是因为我开了账号认证,所以自动装配没有用户名密码也白搭。后来搜到原来是 Actuator 的 health check,可以直接在配置文件里禁用或者自己实现注入一个 RestClient 的 Bean 来让它检测。

具体实现可以借鉴我这段代码:

    // Actuator的ES健康检查需要用到
    @Bean(name = "ESHealthClient")
    public RestClient ESHealthClient() {
        if (!enabled) {
            log.info("ESClient is not enabled");
            return null;
        }
        RestClientBuilder builder = creatBaseConfBuilder(scheme);

        // 1.账号密码的配置
        //CredentialsProvider: 用于提供 HTTP 身份验证凭据的接口; 允许你配置用户名和密码,以便在与服务器建立连接时进行身份验证
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));

        // 2.设置账号密码
        builder.setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder
                .setDefaultCredentialsProvider(credentialsProvider));

        return builder.build();
    }