Remove `settings` suffix from http client properties
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Waiting to run Details
Build and Deploy Snapshot / Trigger Docs Build (push) Blocked by required conditions Details
Build and Deploy Snapshot / Verify (push) Blocked by required conditions Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[early-access:true toolchain:true version:24], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[early-access:true toolchain:true version:24], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:21], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:22], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:22], map[id:windows-latest name:Windows]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }} name:Linux]) (push) Waiting to run Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:windows-latest name:Windows]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:false version:17]) (push) Waiting to run Details
Run System Tests / Java ${{ matrix.java.version}} (map[toolchain:true version:21]) (push) Waiting to run Details

Remove `spring.http.client` deprecation and change
`spring.http.reactiveclient.settings` to `spring.http.reactiveclient`.

Closes gh-45507
This commit is contained in:
Phillip Webb 2025-05-12 17:16:25 -07:00
parent 2923e66143
commit 48ed394679
9 changed files with 25 additions and 102 deletions

View File

@ -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> sslBundles, HttpClientSettingsProperties properties,
HttpClientProperties deprecatedProperties) {
this.factories = new ClientHttpRequestFactories(sslBundles, properties, deprecatedProperties);
HttpClientAutoConfiguration(ObjectProvider<SslBundles> sslBundles, HttpClientProperties properties) {
this.factories = new ClientHttpRequestFactories(sslBundles, properties);
}
@Override

View File

@ -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();
}
}

View File

@ -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 {
}

View File

@ -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> sslBundles,
HttpReactiveClientSettingsProperties properties) {
HttpReactiveClientProperties properties) {
this.connectors = new ClientHttpConnectors(sslBundles, properties);
}

View File

@ -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 {
}

View File

@ -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);

View File

@ -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();

View File

@ -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
*/

View File

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