Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
nightswimmings opened this issue Mar 22, 2023 · 8 comments
Labels
status: pending-design-work Needs design work before any code can be developed type: enhancement A general enhancement

Comments

@nightswimmings
Copy link

nightswimmings commented Mar 22, 2023

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

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Mar 22, 2023
@nightswimmings nightswimmings changed the title Provide a property that configures webclient/webtestclients timeout globally Provide a property that configures webclient/webtestclients default timeout globally Mar 22, 2023
@philwebb philwebb added the for: team-meeting An issue we'd like to discuss as a team to make progress label Mar 22, 2023
@philwebb
Copy link
Member

See also #31496

@philwebb
Copy link
Member

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.

@philwebb philwebb added type: enhancement A general enhancement status: pending-design-work Needs design work before any code can be developed and removed status: waiting-for-triage An issue we've not yet triaged for: team-meeting An issue we'd like to discuss as a team to make progress labels Mar 22, 2023
@philwebb philwebb added this to the General Backlog milestone Mar 22, 2023
@nightswimmings
Copy link
Author

nightswimmings commented Mar 23, 2023

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
Copy link
Author

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
Copy link
Contributor

mvitz commented Jun 19, 2024

@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
Copy link
Member

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

@mvitz
Copy link
Contributor

mvitz commented Jun 21, 2024

@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.

@philwebb philwebb added the for: team-meeting An issue we'd like to discuss as a team to make progress label Jun 21, 2024
@philwebb philwebb removed the for: team-meeting An issue we'd like to discuss as a team to make progress label Jul 11, 2024
@a1shadows
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: pending-design-work Needs design work before any code can be developed type: enhancement A general enhancement
Projects
None yet
Development

No branches or pull requests

5 participants