From 48ed394679a3ba28d2d8f75fb6749f27e50ed6db Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 12 May 2025 17:16:25 -0700 Subject: [PATCH] Remove `settings` suffix from http client properties Remove `spring.http.client` deprecation and change `spring.http.reactiveclient.settings` to `spring.http.reactiveclient`. Closes gh-45507 --- .../client/HttpClientAutoConfiguration.java | 7 ++-- .../http/client/HttpClientProperties.java | 37 ------------------- .../client/HttpClientSettingsProperties.java | 33 ----------------- .../ClientHttpConnectorAutoConfiguration.java | 4 +- ...java => HttpReactiveClientProperties.java} | 4 +- .../HttpClientAutoConfigurationTests.java | 5 +-- ...ntHttpConnectorAutoConfigurationTests.java | 11 +++--- ...ReactiveClientSettingsPropertiesTests.java | 2 +- .../reference/pages/io/rest-client.adoc | 24 +++++------- 9 files changed, 25 insertions(+), 102 deletions(-) delete mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientSettingsProperties.java rename spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/{HttpReactiveClientSettingsProperties.java => HttpReactiveClientProperties.java} (86%) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfiguration.java index e4c55c0bf7f..d1e719d286e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfiguration.java @@ -45,16 +45,15 @@ import org.springframework.http.client.ClientHttpRequestFactory; @AutoConfiguration(after = SslAutoConfiguration.class) @ConditionalOnClass(ClientHttpRequestFactory.class) @Conditional(NotReactiveWebApplicationCondition.class) -@EnableConfigurationProperties({ HttpClientSettingsProperties.class, HttpClientProperties.class }) +@EnableConfigurationProperties(HttpClientProperties.class) public class HttpClientAutoConfiguration implements BeanClassLoaderAware { private final ClientHttpRequestFactories factories; private ClassLoader beanClassLoader; - HttpClientAutoConfiguration(ObjectProvider sslBundles, HttpClientSettingsProperties properties, - HttpClientProperties deprecatedProperties) { - this.factories = new ClientHttpRequestFactories(sslBundles, properties, deprecatedProperties); + HttpClientAutoConfiguration(ObjectProvider sslBundles, HttpClientProperties properties) { + this.factories = new ClientHttpRequestFactories(sslBundles, properties); } @Override diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientProperties.java index a605330f998..7542c9ba93b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientProperties.java @@ -16,12 +16,8 @@ package org.springframework.boot.autoconfigure.http.client; -import java.time.Duration; - import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; -import org.springframework.boot.http.client.HttpRedirects; /** * {@link ConfigurationProperties @ConfigurationProperties} for a Spring's blocking HTTP @@ -30,41 +26,8 @@ import org.springframework.boot.http.client.HttpRedirects; * @author Phillip Webb * @since 3.4.0 * @see ClientHttpRequestFactorySettings - * @deprecated since 3.5.0 for removal in 4.0.0 in favor of - * {@link HttpClientSettingsProperties} */ @ConfigurationProperties("spring.http.client") -@Deprecated(since = "3.5.0", forRemoval = true) public class HttpClientProperties extends AbstractHttpRequestFactoryProperties { - @Override - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.client.settings.factory") - public Factory getFactory() { - return super.getFactory(); - } - - @Override - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.client.settings.redirects") - public HttpRedirects getRedirects() { - return super.getRedirects(); - } - - @Override - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.client.settings.connect-timeout") - public Duration getConnectTimeout() { - return super.getConnectTimeout(); - } - - @Override - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.client.settings.read-timeout") - public Duration getReadTimeout() { - return super.getReadTimeout(); - } - - @Override - @DeprecatedConfigurationProperty(since = "3.5.0", replacement = "spring.http.client.settings.ssl") - public Ssl getSsl() { - return super.getSsl(); - } - } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientSettingsProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientSettingsProperties.java deleted file mode 100644 index 789a9bfcde4..00000000000 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/HttpClientSettingsProperties.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.http.client; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.http.client.reactive.ClientHttpConnectorSettings; - -/** - * {@link ConfigurationProperties @ConfigurationProperties} to configure settings that - * apply to Spring's blocking HTTP clients. - * - * @author Phillip Webb - * @since 3.5.0 - * @see ClientHttpConnectorSettings - */ -@ConfigurationProperties("spring.http.client.settings") -public class HttpClientSettingsProperties extends AbstractHttpRequestFactoryProperties { - -} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfiguration.java index e416beed8ee..247f7c6737f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfiguration.java @@ -48,7 +48,7 @@ import org.springframework.http.client.reactive.ClientHttpConnector; */ @AutoConfiguration(after = SslAutoConfiguration.class) @ConditionalOnClass({ ClientHttpConnector.class, Mono.class }) -@EnableConfigurationProperties(HttpReactiveClientSettingsProperties.class) +@EnableConfigurationProperties(HttpReactiveClientProperties.class) public class ClientHttpConnectorAutoConfiguration implements BeanClassLoaderAware { private final ClientHttpConnectors connectors; @@ -56,7 +56,7 @@ public class ClientHttpConnectorAutoConfiguration implements BeanClassLoaderAwar private ClassLoader beanClassLoader; ClientHttpConnectorAutoConfiguration(ObjectProvider sslBundles, - HttpReactiveClientSettingsProperties properties) { + HttpReactiveClientProperties properties) { this.connectors = new ClientHttpConnectors(sslBundles, properties); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientProperties.java similarity index 86% rename from spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsProperties.java rename to spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientProperties.java index c9e3074179a..596a6287cf3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientProperties.java @@ -27,7 +27,7 @@ import org.springframework.boot.http.client.reactive.ClientHttpConnectorSettings * @since 3.5.0 * @see ClientHttpConnectorSettings */ -@ConfigurationProperties("spring.http.reactiveclient.settings") -public class HttpReactiveClientSettingsProperties extends AbstractClientHttpConnectorProperties { +@ConfigurationProperties("spring.http.reactiveclient") +public class HttpReactiveClientProperties extends AbstractClientHttpConnectorProperties { } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java index 1c4d1210826..ab04de563bd 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/HttpClientAutoConfigurationTests.java @@ -69,9 +69,8 @@ class HttpClientAutoConfigurationTests { @Test void configuresClientHttpRequestFactorySettings() { this.contextRunner.withPropertyValues(sslPropertyValues().toArray(String[]::new)) - .withPropertyValues("spring.http.client.settings.redirects=dont-follow", - "spring.http.client.settings.connect-timeout=10s", "spring.http.client.settings.read-timeout=20s", - "spring.http.client.settings.ssl.bundle=test") + .withPropertyValues("spring.http.client.redirects=dont-follow", "spring.http.client.connect-timeout=10s", + "spring.http.client.read-timeout=20s", "spring.http.client.ssl.bundle=test") .run((context) -> { ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class); assertThat(settings.redirects()).isEqualTo(Redirects.DONT_FOLLOW); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfigurationTests.java index efe00240680..1823cf23969 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectorAutoConfigurationTests.java @@ -123,7 +123,7 @@ class ClientHttpConnectorAutoConfigurationTests { @Test void configuresDefinedClientHttpConnectorBuilder() { - this.contextRunner.withPropertyValues("spring.http.reactiveclient.settings.connector=jetty") + this.contextRunner.withPropertyValues("spring.http.reactiveclient.connector=jetty") .run((context) -> assertThat(context.getBean(ClientHttpConnectorBuilder.class)) .isInstanceOf(JettyClientHttpConnectorBuilder.class)); } @@ -131,10 +131,9 @@ class ClientHttpConnectorAutoConfigurationTests { @Test void configuresClientHttpConnectorSettings() { this.contextRunner.withPropertyValues(sslPropertyValues().toArray(String[]::new)) - .withPropertyValues("spring.http.reactiveclient.settings.redirects=dont-follow", - "spring.http.reactiveclient.settings.connect-timeout=10s", - "spring.http.reactiveclient.settings.read-timeout=20s", - "spring.http.reactiveclient.settings.ssl.bundle=test") + .withPropertyValues("spring.http.reactiveclient.redirects=dont-follow", + "spring.http.reactiveclient.connect-timeout=10s", "spring.http.reactiveclient.read-timeout=20s", + "spring.http.reactiveclient.ssl.bundle=test") .run((context) -> { ClientHttpConnectorSettings settings = context.getBean(ClientHttpConnectorSettings.class); assertThat(settings.redirects()).isEqualTo(HttpRedirects.DONT_FOLLOW); @@ -156,7 +155,7 @@ class ClientHttpConnectorAutoConfigurationTests { @Test void clientHttpConnectorBuilderCustomizersAreApplied() { - this.contextRunner.withPropertyValues("spring.http.reactiveclient.settings.connector=jdk") + this.contextRunner.withPropertyValues("spring.http.reactiveclient.connector=jdk") .withUserConfiguration(ClientHttpConnectorBuilderCustomizersConfiguration.class) .run((context) -> { ClientHttpConnector connector = context.getBean(ClientHttpConnectorBuilder.class).build(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsPropertiesTests.java index 538965262c7..6fd3afa1fae 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/HttpReactiveClientSettingsPropertiesTests.java @@ -28,7 +28,7 @@ import org.springframework.boot.http.client.reactive.ReactorClientHttpConnectorB import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link HttpReactiveClientSettingsProperties}. + * Tests for {@link HttpReactiveClientProperties}. * * @author Phillip Webb */ diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/rest-client.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/rest-client.adoc index b20cb7f37d8..9d16ff97b17 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/rest-client.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/reference/pages/io/rest-client.adoc @@ -55,7 +55,7 @@ You can learn more about the {url-spring-framework-docs}/web/webflux-webclient/c [[io.rest-client.webclient.configuration]] === Global HTTP Connector Configuration -If the auto-detected javadoc:org.springframework.http.client.reactive.ClientHttpConnector[] does not meet your needs, you can use the configprop:spring.http.reactiveclient.settings.connector[] property to pick a specific connector. +If the auto-detected javadoc:org.springframework.http.client.reactive.ClientHttpConnector[] does not meet your needs, you can use the configprop:spring.http.reactiveclient.connector[] property to pick a specific connector. For example, if you have Reactor Netty on your classpath, but you prefer Jetty's javadoc:org.eclipse.jetty.client.HttpClient[] you can add the following: [configprops,yaml] @@ -63,8 +63,7 @@ For example, if you have Reactor Netty on your classpath, but you prefer Jetty's spring: http: reactiveclient: - settings: - connector: jetty + connector: jetty ---- You can also set properties to change defaults that will be applied to all reactive connectors. @@ -75,10 +74,9 @@ For example, you may want to change timeouts and if redirects are followed: spring: http: reactiveclient: - settings: - connect-timeout: 2s - read-timeout: 1s - redirects: dont-follow + connect-timeout: 2s + read-timeout: 1s + redirects: dont-follow ---- For more complex customizations, you can use javadoc:org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorBuilderCustomizer[] or declare your own javadoc:org.springframework.boot.http.client.reactive.ClientHttpConnectorBuilder[] bean which will cause auto-configuration to back off. @@ -248,7 +246,7 @@ If multiple clients are available on the classpath, and not global configuration [[io.rest-client.clienthttprequestfactory.configuration]] === Global HTTP Client Configuration -If the auto-detected HTTP client does not meet your needs, you can use the configprop:spring.http.client.settings.factory[] property to pick a specific factory. +If the auto-detected HTTP client does not meet your needs, you can use the configprop:spring.http.client.factory[] property to pick a specific factory. For example, if you have Apache HttpClient on your classpath, but you prefer Jetty's javadoc:org.eclipse.jetty.client.HttpClient[] you can add the following: [configprops,yaml] @@ -256,8 +254,7 @@ For example, if you have Apache HttpClient on your classpath, but you prefer Jet spring: http: client: - settings: - factory: jetty + factory: jetty ---- You can also set properties to change defaults that will be applied to all clients. @@ -268,10 +265,9 @@ For example, you may want to change timeouts and if redirects are followed: spring: http: client: - settings: - connect-timeout: 2s - read-timeout: 1s - redirects: dont-follow + connect-timeout: 2s + read-timeout: 1s + redirects: dont-follow ---- For more complex customizations, you can use javadoc:org.springframework.boot.autoconfigure.http.client.ClientHttpRequestFactoryBuilderCustomizer[] or declare your own javadoc:org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder[] bean which will cause auto-configuration to back off.