This project provides a Spring-Boot Starter that enables the additional configuration of the used Httpclients.
It supports the configuration of OkHttp and Apache HttpClient which are also the supported Clients in Spring.
The httpclient-spring-boot-starter
brings most of the required configuration with it, therefor you only need to add it as a maven dependency and enable the desired Httpclient.
<dependency>
<groupId>de.dev-eth0.spring-boot.httpclient</groupId>
<artifactId>httpclient-spring-boot-starter</artifactId>
<version>LATEST-VERSION</version>
</dependency>
Make sure, that you have either org.apache.httpcomponents:httpclient
or com.squareup.okhttp3:okhttp
declared as a dependency and enable the configuration as described in spring-cloud-commons - http-clients.
This will make sure, that the spring-cloud
dependencies use the custom client configurations.
Feign uses a different configuration to enable the clients: feign.okhttp.enabled
and feign.httpclient.enabled
.
To make sure, your RestTemplate uses the custom client, you need to configure it accordingly:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder, ClientHttpRequestFactory clientHttpRequestFactory) {
return builder.requestFactory(() -> clientHttpRequestFactory).build();
}
All configuration values are prefixed with http.client
(e.g. http.client.timeouts.connectionTimeout
).
It's possible to configure the proxy based on the requested hostnames using the hostPattern
config.
Config | Description | Default | Example |
---|---|---|---|
sslContext | SSL Version (optional) | TLSv1.2 |
TLSv1.3 |
timeouts.connectionTimeout (optional) | Connection Timeout in ms | 5000 | |
timeouts.socketTimeout (optional) | Socket Timeout in ms, for OkHttp this is used as readTimeout and writeTimeout | 10000 | |
proxies[] (optional) | Configuration for used proxy servers | ||
proxies[].hostPatterns | Pattern for matching the hostname, empty matches all | empty | google.* |
proxies[].proxyHost | Hostname or IP of the Proxy | 10.0.9.1 or corp-proxy.domain |
|
proxies[].proxyPort | Port of the Proxy (optional) | 3128 | |
proxies[].proxyUser | Proxy user name (optional) | testUser |
|
proxies[].proxyPassword | Proxy password (optional) | testPassword |
|
keystore.path | Keystore file path | classpath:keystore.jks |
|
keystore.password | Keystore password | changeit |
|
keystore.type | Keystore type (optional) | PKCS12 |
|
truststore.path | Truststore file path | classpath:truststore.jks |
|
truststore.password | Truststore password | changeit |
|
truststore.type | Truststore type (optional) | JKS |
Example:
http:
client:
proxies:
- hostPatterns: ["google.de]
proxyHost: localhost
proxyPort: 3333
proxyUser: testUser
proxyPassword: testPassword
timeouts:
connectionTimeout: 5000
socketTimeout: 10000
You can find a sample project which configures both Feign
and RestTemplate
to use either OkHttp
or Apache HttpClient
in /httpclient-spring-boot-sample
.
The project includes the spring-boot-maven-plugin
therefor you can simply run mvn clean install spring:boot-run
. By default, the project uses Apache HttpClient
, if you want to use OkHttp
, you can use the following command:
SPRING_PROFILES_ACTIVE=okhttp mvn spring-boot:run
The project also contains a docker-compose.yml
file which starts several local servers to demonstrate the usecases.