Skip to content

Commit 48be6e1

Browse files
committed
add tests and documentation
Signed-off-by: Severin Kistler <kistlerseverin@gmail.com>
1 parent 1f100f2 commit 48be6e1

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

docs/modules/ROOT/pages/spring-cloud-openfeign.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ When it comes to the Apache HttpClient 5-backed Feign clients, it's enough to en
144144
You can customize the HTTP client used by providing a bean of either `org.apache.hc.client5.http.impl.classic.CloseableHttpClient` when using Apache HC5.
145145

146146
You can further customise http clients by setting values in the `spring.cloud.openfeign.httpclient.xxx` properties. The ones prefixed just with `httpclient` will work for all the clients, the ones prefixed with `httpclient.hc5` to Apache HttpClient 5, and the ones prefixed with `httpclient.http2` to Http2Client. You can find a full list of properties you can customise in the appendix.
147-
If you can not configure Apache HttpClient 5 by using properties, there is an `HttpClient5FeignConfiguration.HttpClientBuilderCustomizer` interface for programmatic configuration.
147+
If you can not configure Apache HttpClient 5 by using properties, there is an `HttpClient5FeignConfiguration.HttpClientBuilderCustomizer` interface for programmatic configuration. Similarly, to configure the `HttpClientConnectionManager`, you can use `HttpClient5FeignConfiguration.HttpClientConnectionManagerBuilderCustomizer`.
148148

149149
TIP: Apache HTTP Components `5.4` have changed defaults in the HttpClient relating to HTTP/1.1 TLS upgrades. Most proxy servers handle upgrades without issue, however, you may encounter issues with Envoy or Istio. If you need to restore previous behaviour, you can use `HttpClient5FeignConfiguration.HttpClientBuilderCustomizer` to do it, as shown in the example below.
150150

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/FeignHttpClient5ConfigurationTests.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
2222
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
2323
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
24+
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
2425
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
2526
import org.junit.jupiter.api.Test;
2627
import org.mockito.Mockito;
@@ -29,6 +30,7 @@
2930
import org.springframework.boot.WebApplicationType;
3031
import org.springframework.boot.builder.SpringApplicationBuilder;
3132
import org.springframework.cloud.openfeign.clientconfig.HttpClient5FeignConfiguration.HttpClientBuilderCustomizer;
33+
import org.springframework.cloud.openfeign.clientconfig.HttpClient5FeignConfiguration.HttpClientConnectionManagerBuilderCustomizer;
3234
import org.springframework.context.ConfigurableApplicationContext;
3335
import org.springframework.context.annotation.Bean;
3436
import org.springframework.context.annotation.Configuration;
@@ -99,14 +101,35 @@ void shouldInstantiateHttpClient5ByUsingHttpClientBuilderCustomizer() {
99101
}
100102
}
101103

104+
@Test
105+
void shouldInstantiateHttpClientConnectionManager5ByUsingHttpClientConnectionManagerBuilderCustomizer() {
106+
ConfigurableApplicationContext context = new SpringApplicationBuilder().web(WebApplicationType.NONE)
107+
.sources(FeignAutoConfiguration.class, Config.class)
108+
.run();
109+
110+
HttpClientConnectionManager httpClientConnectionManager = context.getBean(HttpClientConnectionManager.class);
111+
assertThat(httpClientConnectionManager).isNotNull();
112+
HttpClientConnectionManagerBuilderCustomizer customizer = context.getBean(HttpClientConnectionManagerBuilderCustomizer.class);
113+
verify(customizer).customize(any(PoolingHttpClientConnectionManagerBuilder.class));
114+
115+
if (context != null) {
116+
context.close();
117+
}
118+
}
119+
102120
@Configuration
103121
static class Config {
104122

105123
@Bean
106-
HttpClientBuilderCustomizer customizer() {
124+
HttpClientBuilderCustomizer httpClientCustomizer() {
107125
return Mockito.mock(HttpClientBuilderCustomizer.class);
108126
}
109127

128+
@Bean
129+
HttpClientConnectionManagerBuilderCustomizer httpClientConnectionManagerCustomizer() {
130+
return Mockito.mock(HttpClientConnectionManagerBuilderCustomizer.class);
131+
}
132+
110133
}
111134

112135
}

0 commit comments

Comments
 (0)