我正在使用 Java 11 HttpClient 将请求发送到远程服务器。
我想知道以下两种不同方式创建对象时 HttpClient 对象是否有区别
HttpClient client = HttpClient.newHttpClient()
对
HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1). .connectTimeout(Duration.ofMillis(2000)) .build()
对于初学者来说,
使用
connectTimeout
创建对象时似乎没有设置
HttpClient.newHttpClient()
的规定
另外,根据这篇文章 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。
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()
创建它们。