springboot(五)設置Httpclient和Spring的整合


設置HttpclientSpring的整合

import org.apache.http.client.config.RequestConfig;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.PropertySource;

import org.springframework.context.annotation.Scope;

 

import com.taotao.common.httpclient.IdleConnectionEvictor;

 

@Configuration

@PropertySource(value = "classpath:httpclient.properties")

public class HttpclientSpringConfig {

 

    @Value("${http.maxTotal}")

    private Integer httpMaxTotal;

 

    @Value("${http.defaultMaxPerRoute}")

    private Integer httpDefaultMaxPerRoute;

 

    @Value("${http.connectTimeout}")

    private Integer httpConnectTimeout;

 

    @Value("${http.connectionRequestTimeout}")

    private Integer httpConnectionRequestTimeout;

 

    @Value("${http.socketTimeout}")

    private Integer httpSocketTimeout;

 

    @Value("${http.staleConnectionCheckEnabled}")

    private Boolean httpStaleConnectionCheckEnabled;

 

    @Autowired

    private PoolingHttpClientConnectionManager manager;

 

    @Bean

    public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {

        PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();

        // 最大連接數

        poolingHttpClientConnectionManager.setMaxTotal(httpMaxTotal);

        // 每個主機的最大並發數

        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(httpDefaultMaxPerRoute);

        return poolingHttpClientConnectionManager;

    }

 

    // 定期關閉無效連接

    @Bean

    public IdleConnectionEvictor idleConnectionEvictor() {

        return new IdleConnectionEvictor(manager);

    }

 

    // 定義Httpclient

    @Bean

    @Scope("prototype")

    public CloseableHttpClient closeableHttpClient() {

        return HttpClients.custom().setConnectionManager(this.manager).build();

    }

 

    // 請求配置

    @Bean

    public RequestConfig requestConfig() {

        return RequestConfig.custom().setConnectTimeout(httpConnectTimeout) // 創建連接的最長時間

                .setConnectionRequestTimeout(httpConnectionRequestTimeout) // 從連接池中獲取到連接的最長時間

                .setSocketTimeout(httpSocketTimeout) // 數據傳輸的最長時間

                .setStaleConnectionCheckEnabled(httpStaleConnectionCheckEnabled) // 提交請求前測試連接是否可用

                .build();

    }

 

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM