Java 11 OpenJDK 中的 HttpClient 对象

问题描述 投票:0回答:1

我正在使用 Java 11 HttpClient 将请求发送到远程服务器。

我想知道以下两种不同方式创建对象时 HttpClient 对象是否有区别

HttpClient client = HttpClient.newHttpClient()

HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1). .connectTimeout(Duration.ofMillis(2000)) .build()

对于初学者来说,

  1. 使用

    connectTimeout
    创建对象时似乎没有设置
    HttpClient.newHttpClient()

    的规定
  2. 另外,根据这篇文章 https://stackoverflow.com/questions/53617574/how-to-keep-connection-alive-in-java-11-http-client,似乎是默认连接池(无限仅当使用

    keepalive.timeout=1200
     创建 HTTPCLient 对象时,才会使用 
    HttpClient.newHttpClient()

    秒创建连接)

使用

HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1). .connectTimeout(Duration.ofMillis(connectionTimeout)) .build()
创建时不会发生这种情况吗?

我想利用自定义的

keepalive.timeout=120
秒自动创建 Java 11 HTTPClient 连接池,并且仍然能够设置
connectTimeout
值。

请指教,TIA。

java-11 java-http-client
1个回答
0
投票

HttpClient.newHttpClient()
相当于
HttpClient.newBuilder().build()
。 这意味着它会创建一个具有默认设置的
HttpClient

因此,如果您需要非默认设置,则应该使用

HttpClient client = HttpClient.newBuilder()
                              .version(HttpClient.Version.HTTP_1_1). 
                              .connectTimeout(Duration.ofMillis(2000)) 
                              .build();

至于保持活动属性,如参考问题中所述,您可以使用

将默认值更改为 2 分钟
-Djdk.httpclient.keepalive.timeout=120

这将影响所有

HttpClient
实例,无论您是使用
HttpClient.newBuilder()
还是使用
HttpClient.newHttpClient()
创建它们。

© www.soinside.com 2019 - 2024. All rights reserved.