
org.kaizen4j.starter.resttemplate.RestTemplateAutoConfiguration Maven / Gradle / Ivy
package org.kaizen4j.starter.resttemplate;
import com.google.common.base.Preconditions;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;
/**
* Created by liuguowen on 2019/6/27.
*/
@Configuration
@EnableConfigurationProperties({RestTemplateProperties.class})
@ConditionalOnProperty(prefix = "ka4j.resttemplate", value = "enabled", havingValue = "true")
public class RestTemplateAutoConfiguration {
private static final Logger logger = LoggerFactory.getLogger(RestTemplateAutoConfiguration.class);
private RestTemplateProperties restTemplateProperties;
public RestTemplateAutoConfiguration(RestTemplateProperties restTemplateProperties) {
this.restTemplateProperties = restTemplateProperties;
}
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory,
HttpMessageConverter[] httpMessageConverters) {
Preconditions.checkArgument(0 != httpMessageConverters.length, "HttpMessageConverter 数组不能为空");
logger.info("Kaizen4j 自动配置 RestTemplate 使用 [{}]", clientHttpRequestFactory.getClass().getName());
return new RestTemplateBuilder().requestFactory(() -> clientHttpRequestFactory)
.additionalMessageConverters(httpMessageConverters).build();
}
@Bean
@ConditionalOnMissingBean
public HttpMessageConverter[] httpMessageConverters() {
return new HttpMessageConverter[] {new StringHttpMessageConverter(StandardCharsets.UTF_8),
new MappingJackson2HttpMessageConverter(), new ByteArrayHttpMessageConverter()};
}
@Bean
@ConditionalOnMissingBean
public ClientHttpRequestFactory clientHttpRequestFactory() {
OkHttpClient httpClient =
new OkHttpClient.Builder().connectTimeout(restTemplateProperties.getTimeout(), TimeUnit.SECONDS)
.readTimeout(restTemplateProperties.getTimeout(), TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.writeTimeout(restTemplateProperties.getTimeout(), TimeUnit.SECONDS)
.connectionPool(connectionPool()).build();
return new OkHttp3ClientHttpRequestFactory(httpClient);
}
private ConnectionPool connectionPool() {
return new ConnectionPool(restTemplateProperties.getMaxIdleConnections(),
restTemplateProperties.getKeepAliveDuration(), TimeUnit.SECONDS);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy