北京自考网官方网站,免费行情软件app网站大全,seo优化关键词是什么意思,开公司怎么做网站SpringBoot自带的RestTemplate是没有使用连接池的#xff0c;只是SimpleClientHttpRequestFactory实现了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2个工厂接口#xff0c;因此每次调用接口都会创建连接和销毁连接#xff0c;如果是高并发场景下会大大降低性…SpringBoot自带的RestTemplate是没有使用连接池的只是SimpleClientHttpRequestFactory实现了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2个工厂接口因此每次调用接口都会创建连接和销毁连接如果是高并发场景下会大大降低性能。因此我们可以使用Apache的HttpClient连接池。
pom.xml !-- RestTemplate使用Apache的HttpComponentsClientHttpRequestFactory替换掉Spring SimpleClientHttpRequestFactory 以使用Apache HttpClient的连接池。 --dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactId/dependencyRestTemplate配置类
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;Configuration
public class RestTemplateConfig {Beanpublic RestTemplate restTemplate() {PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager();connectionManager.setMaxTotal(50);connectionManager.setDefaultMaxPerRoute(20);RequestConfig requestConfig RequestConfig.custom().setConnectionRequestTimeout(5000) // timeout to get connection from pool.setSocketTimeout(5000) // standard connection timeout.setConnectTimeout(5000) // standard connection timeout.build();HttpClient httpClient HttpClientBuilder.create().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();ClientHttpRequestFactory requestFactory new HttpComponentsClientHttpRequestFactory(httpClient);return new RestTemplate(requestFactory);}}调用 Autowired private RestTemplate restTemplate; public Res getData(Dto dto) {String url https://xxx.com/api/xxx;//封装请求头参数.HttpHeaders headers new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set(Content-Type, application/json;charsetutf-8);headers.set(自定义请求头key,自定义请求头value);Res res restTemplate.postForEntity(url, new HttpEntity(dto, headers), Res.class).getBody();return res;}