spring-projects / spring-boot

Spring Boot
https://spring.io/projects/spring-boot
Apache License 2.0
74.51k stars 40.53k forks source link

Provide a property that configures webclient/webtestclients default timeout globally #34711

Open nightswimmings opened 1 year ago

nightswimmings commented 1 year ago

I think, WebClient/WebTestClient(Builder) should be able to configure defaults through properties, especially timeout and especially for WebTestClient, since its a setup most people would tune in order to being able to debug for long time and not get a connection exception.

Kind of @AutoConfigureWebTestClient(timeout = "10000"), but through properties on a global scope.

My apologies if such a setup exists, I could not find it in issues nor spring-boot-properties docs

philwebb commented 1 year ago

See also #31496

philwebb commented 1 year ago

We're not totally sure that a property is the best solution, but it would be really nice if we could offer a better way to programmatically change the timeout for an individual WebClient.builder(). We'll need to do some more design work for this one and possibly request changes in spring-framework.

nightswimmings commented 1 year ago

To be honest Phil, I think global would be convenient for WebClient , at least during test, since when debugging (at least webclient's non-reactive) communications, it's very annoying to get java.lang.IllegalStateException: Timeout on blocking read for X NANOSECONDS, every then and now. I'm not exactly sure of the internal mechanics of flux timings (maybe it's my fault on conceptual design), but I assume it's a matter of the lazy/future-evaluations chain because I never suffer them with servlet arch. But just my 2c as a heavy user

nightswimmings commented 1 year ago

If this goes on, there is another property that would benefit from this, logging: https://stackoverflow.com/questions/46154994/how-to-log-spring-5-webclient-call

mvitz commented 2 months ago

@philwebb any news about this one?

I was, internally, asked how to configure timeouts for the new RestClient.

My current solution is a RestClientCustomizer that sets a custom ClientHttpRequestFactory. To rely on the default decision tree of Spring Boot which client library to use, I “stole” the ClientHttpRequestFactories.get(...) approach of the autoconfiguration.

Especially, reusing this logic was only possible because I looked into the source code of the autoconfiguration. If not adding properties for configuring these timeouts, it would at least be a good idea to enhance the Spring Documentation about RestClient and include a hint to ClientHttpRequestFactories there.

philwebb commented 2 months ago

@mvitz There's no update on this one yet I'm afraid

mvitz commented 2 months ago

@philwebb Thanks for your quick reply. Anything I can do to help?

I understand that this case is special because configuring a builder via properties is not that common but on the other hand being able to easily configure things like timeouts would be useful, too.

I was thinking if something like spring.client.rest.default.connection.read-timeout would be an option. In theory the matching @ConfigurationProperties-Class could be even reusable for configuring application specific instances.

Let me know if theres anything I can do to help/support.

a1shadows commented 1 month ago

Is there anything I can do to help? This is a feature that would be super useful for us. SO question regarding the same: https://stackoverflow.com/questions/78675295/are-there-any-spring-properties-to-set-defaults-for-spring-webclient