|
21 | 21 | import java.net.http.HttpRequest;
|
22 | 22 | import java.net.http.HttpResponse;
|
23 | 23 | import java.nio.ByteBuffer;
|
| 24 | +import java.time.Duration; |
24 | 25 | import java.util.List;
|
25 | 26 | import java.util.concurrent.CompletableFuture;
|
26 | 27 | import java.util.concurrent.Executor;
|
@@ -49,6 +50,9 @@ public class JdkClientHttpConnector implements ClientHttpConnector {
|
49 | 50 |
|
50 | 51 | private DataBufferFactory bufferFactory = DefaultDataBufferFactory.sharedInstance;
|
51 | 52 |
|
| 53 | + @Nullable |
| 54 | + private Duration readTimeout = null; |
| 55 | + |
52 | 56 |
|
53 | 57 | /**
|
54 | 58 | * Default constructor that uses {@link HttpClient#newHttpClient()}.
|
@@ -91,12 +95,24 @@ public void setBufferFactory(DataBufferFactory bufferFactory) {
|
91 | 95 | this.bufferFactory = bufferFactory;
|
92 | 96 | }
|
93 | 97 |
|
| 98 | + /** |
| 99 | + * Set the underlying {@code HttpClient}'s read timeout as a {@code Duration}. |
| 100 | + * <p>Default is the system's default timeout. |
| 101 | + * @since 6.2 |
| 102 | + * @see java.net.http.HttpRequest.Builder#timeout |
| 103 | + */ |
| 104 | + public void setReadTimeout(Duration readTimeout) { |
| 105 | + Assert.notNull(readTimeout, "readTimeout is required"); |
| 106 | + this.readTimeout = readTimeout; |
| 107 | + } |
| 108 | + |
94 | 109 |
|
95 | 110 | @Override
|
96 | 111 | public Mono<ClientHttpResponse> connect(
|
97 | 112 | HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
|
98 | 113 |
|
99 |
| - JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory); |
| 114 | + JdkClientHttpRequest jdkClientHttpRequest = new JdkClientHttpRequest(method, uri, this.bufferFactory, |
| 115 | + this.readTimeout); |
100 | 116 |
|
101 | 117 | return requestCallback.apply(jdkClientHttpRequest).then(Mono.defer(() -> {
|
102 | 118 | HttpRequest httpRequest = jdkClientHttpRequest.getNativeRequest();
|
|
0 commit comments