如何在我的单线程 Java 客户端应用程序中重用相同的 HttpClient 连接?

How can I reuse same HttpClient Connection in my Single threaded Java Client Application?

我正在开发一个单线程 java 客户端。它正在建立一个 HttpClient 连接来命中一些 API。我想在一段时间后使用相同的连接对象来访问另一组 API。它在单个 JVM 上是 运行,而 JVM 在整个过程中是 运行。 Apache 是否提供了任何东西,我可以使用它来保持该连接对象处于活动状态并用于从中命中另一组 API。 JVM 是 运行 整个过程,但是一旦我创建了一个连接对象并第二次点击另一个 API,它就会创建一个新对象。我想使用我之前创建的现有对象。

我正在使用以下方法建立 HttpClient 连接。

public static CloseableHttpClient getConnection() {
        BasicHttpClientConnectionManager conMgr = new BasicHttpClientConnectionManager();
        HttpClientBuilder clientBuilder = HttpClientBuilder.create().disableAutomaticRetries().useSystemProperties()
                .disableCookieManagement().disableRedirectHandling().setConnectionManager(conMgr);
        return clientBuilder.build();
    }

如果你无论如何都知道我可以重用这个连接对象而不是创建新的第二次。请更新。

简单来说,您可以在静态 public 上下文中创建它:

public class MainApplication{

    private static BasicHttpClientConnectionManager conMgr = new BasicHttpClientConnectionManager();
    public static CloseableHttpClient closeableHttpClient =  HttpClientBuilder.create().disableAutomaticRetries().useSystemProperties()
            .disableCookieManagement().disableRedirectHandling().setConnectionManager(conMgr).build();


    public void noneStaticMethodUsingHttpClient() throws IOException {
            closeableHttpClient.close();
    }

}

然后它会在您的应用程序中共享,并且只会在您的应用程序启动时进行初始化。

但是,我不是 public 静态的粉丝,因此我也建议您查看可用于包装静态初始化的 Singleton 模式。

https://refactoring.guru/design-patterns/singleton