带有自定义ConnectionPool的RestTemplate吗?

时间:2019-04-02 09:55:46

标签: java spring spring-boot resttemplate spring-web

我正在使用以下配置来创建RestTemplate bean。

@Bean
@Primary
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();

    return builder.requestFactory(() -> new BufferingClientHttpRequestFactory(factory))
            .build();
}

问题:默认情况下,HttpClient的实例如下:

org.apache.http.impl.client.HttpClientBuilder:

    String s = System.getProperty("http.keepAlive", "true");
    if ("true".equalsIgnoreCase(s)) {
        s = System.getProperty("http.maxConnections", "5");
        int max = Integer.parseInt(s);
        poolingmgr.setDefaultMaxPerRoute(max);
        poolingmgr.setMaxTotal(2 * max);
    }

因此,默认情况下,该其余模板上最多有10个并发url连接。

问题:使用spring-boot时,如何最好地配置最大总数?我没有找到任何application.properties条目来将其设置为自定义值。

侧问:每条路线是什么意思?是一条路线localhost:8080/myfirst,另一条路线是localhost:8080/mysnd?还是两条路线都localhost:8080

1 个答案:

答案 0 :(得分:0)

对不起,我误会了您的问题。

这很简单:您可以在application.properties中创建自己的配置。 例如:

## Connection pool max size to appache http client
myProjectId.http.maxConnections=100

然后在您的Bean / Service /其他内容中,您可以通过简单的操作将其注入

@Bean
public class HttpClient  {

    @Value( "${myProjectId.http.maxConnections}" )
    private int maxConnections;

    // some code below

}