如何在调用@Predestroy方法时有效地使用Elasticsearch highlevelClient bean

问题描述

我有一个弹簧启动应用程序,该应用程序执行弹性搜索API调用(CRUD操作),并且运行正常,但是在关闭时(由于某些服务器维护或升级),它没有处理所有线程/请求并以org.apache.http.ConnectionClosedException: Connection closed unexpectedly退出。 为了避免这种情况,我添加@Predestory方法添加Thread.sleep(60000),但是它没有用。 请指导我正确处理此情况的步骤。

ES RestHighLevelClient Bean:

 @Bean
    public RestHighLevelClient highLevelRestClient() {
        if (StringUtils.isNotBlank(esUser)) {
            //Auth is present
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(esUser,esPassword));

            if ("https".equalsIgnoreCase(esProtocol)) {
                client = new RestHighLevelClient(getHttpsClientBuilder(credentialsProvider));
            } else {
                client = new RestHighLevelClient(getHttpClientBuilder(credentialsProvider));
            }
        } else {
            client = new RestHighLevelClient(restClientBuilder());
        }
        return client;
    }
服务类中的

和Predestroy方法

  @PreDestroy
    public void destroy() throws InterruptedException {
        Thread.sleep(60000);
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)