Merge pull request #32941 from m4tt30c91
* pr/32941: Polish contribution Add support for specifying a read timeout for the reactive jdk client Closes gh-32941
This commit is contained in:
commit
55a7a49863
|
|
@ -21,6 +21,7 @@ import java.net.http.HttpClient;
|
|||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Executor;
|
||||
|
|
@ -49,6 +50,9 @@ public class JdkClientHttpConnector implements ClientHttpConnector {
|
|||
|
||||
private DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance;
|
||||
|
||||
@Nullable
|
||||
private Duration readTimeout = null;
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor that uses {@link HttpClient#newHttpClient()}.
|
||||
|
|
@ -91,12 +95,24 @@ public class JdkClientHttpConnector implements ClientHttpConnector {
|
|||
this.bufferFactory = bufferFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the underlying {@code HttpClient}'s read timeout as a {@code Duration}.
|
||||
* <p>Default is the system's default timeout.
|
||||
* @since 6.2
|
||||
* @see java.net.http.HttpRequest.Builder#timeout
|
||||
*/
|
||||
public void setReadTimeout(Duration readTimeout) {
|
||||
Assert.notNull(readTimeout, "readTimeout is required");
|
||||
this.readTimeout = readTimeout;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Mono<ClientHttpResponse> connect(
|
||||
HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
|
||||
|
||||
JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory);
|
||||
JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory,
|
||||
this.readTimeout);
|
||||
|
||||
return requestCallback.apply(jdkClientHttpRequest).then(Mono.defer(() -> {
|
||||
HttpRequest httpRequest = jdkClientHttpRequest.getNativeRequest();
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import java.net.URI;
|
|||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Flow;
|
||||
|
|
@ -36,6 +37,7 @@ import org.springframework.core.io.buffer.DataBufferFactory;
|
|||
import org.springframework.http.HttpCookie;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
|
|
@ -57,7 +59,8 @@ class JdkClientHttpRequest extends AbstractClientHttpRequest {
|
|||
private final HttpRequest.Builder builder;
|
||||
|
||||
|
||||
public JdkClientHttpRequest(HttpMethod httpMethod, URI uri, DataBufferFactory bufferFactory) {
|
||||
public JdkClientHttpRequest(HttpMethod httpMethod, URI uri, DataBufferFactory bufferFactory,
|
||||
@Nullable Duration readTimeout) {
|
||||
Assert.notNull(httpMethod, "HttpMethod is required");
|
||||
Assert.notNull(uri, "URI is required");
|
||||
Assert.notNull(bufferFactory, "DataBufferFactory is required");
|
||||
|
|
@ -66,6 +69,9 @@ class JdkClientHttpRequest extends AbstractClientHttpRequest {
|
|||
this.uri = uri;
|
||||
this.bufferFactory = bufferFactory;
|
||||
this.builder = HttpRequest.newBuilder(uri);
|
||||
if (readTimeout != null) {
|
||||
this.builder.timeout(readTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue