Skip to content

Commit a8eba89

Browse files
author
Matteo Cristoforo
committed
Add a way to set the read timeout to reactive jdk client
Add a setReadTimeout method to the http reactive jdk native connector
1 parent df238d0 commit a8eba89

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpConnector.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.net.http.HttpRequest;
2222
import java.net.http.HttpResponse;
2323
import java.nio.ByteBuffer;
24+
import java.time.Duration;
2425
import java.util.List;
2526
import java.util.concurrent.CompletableFuture;
2627
import java.util.concurrent.Executor;
@@ -49,6 +50,9 @@ public class JdkClientHttpConnector implements ClientHttpConnector {
4950

5051
private DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance;
5152

53+
@Nullable
54+
private Duration readTimeout = null;
55+
5256

5357
/**
5458
* Default constructor that uses {@link HttpClient#newHttpClient()}.
@@ -91,12 +95,22 @@ public void setBufferFactory(DataBufferFactory bufferFactory) {
9195
this.bufferFactory = bufferFactory;
9296
}
9397

98+
/**
99+
* Set the default read timeout to use.
100+
* <p>By default, this is null, so no read timeout will be set.</p>
101+
*/
102+
public void setReadTimeout(Duration readTimeout) {
103+
Assert.notNull(readTimeout, "readTimeout is required");
104+
this.readTimeout = readTimeout;
105+
}
106+
94107

95108
@Override
96109
public Mono<ClientHttpResponse> connect(
97110
HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
98111

99-
JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory);
112+
JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory,
113+
this.readTimeout);
100114

101115
return requestCallback.apply(jdkClientHttpRequest).then(Mono.defer(() -> {
102116
HttpRequest httpRequest = jdkClientHttpRequest.getNativeRequest();

spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpRequest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.net.http.HttpClient;
2121
import java.net.http.HttpRequest;
2222
import java.nio.ByteBuffer;
23+
import java.time.Duration;
2324
import java.util.List;
2425
import java.util.Map;
2526
import java.util.concurrent.Flow;
@@ -36,6 +37,7 @@
3637
import org.springframework.http.HttpCookie;
3738
import org.springframework.http.HttpHeaders;
3839
import org.springframework.http.HttpMethod;
40+
import org.springframework.lang.Nullable;
3941
import org.springframework.util.Assert;
4042
import org.springframework.util.MultiValueMap;
4143

@@ -57,7 +59,8 @@ class JdkClientHttpRequest extends AbstractClientHttpRequest {
5759
private final HttpRequest.Builder builder;
5860

5961

60-
public JdkClientHttpRequest(HttpMethod httpMethod, URI uri, DataBufferFactory bufferFactory) {
62+
public JdkClientHttpRequest(HttpMethod httpMethod, URI uri, DataBufferFactory bufferFactory,
63+
@Nullable Duration readTimeout) {
6164
Assert.notNull(httpMethod, "HttpMethod is required");
6265
Assert.notNull(uri, "URI is required");
6366
Assert.notNull(bufferFactory, "DataBufferFactory is required");
@@ -66,6 +69,9 @@ public JdkClientHttpRequest(HttpMethod httpMethod, URI uri, DataBufferFactory bu
6669
this.uri = uri;
6770
this.bufferFactory = bufferFactory;
6871
this.builder = HttpRequest.newBuilder(uri);
72+
if (readTimeout != null) {
73+
this.builder.timeout(readTimeout);
74+
}
6975
}
7076

7177

0 commit comments

Comments
 (0)