zoukankan      html  css  js  c++  java
  • 关于spring resttemplate超时设置

    • Spring org.springframework.web.client.RestTemplate 使用 org.springframework.http.client.SimpleClientHttpRequestFactory建立 java.net.HttpURLConnection
    • 后者采用 HttpURLConnection 的默认超时配置

    HttpURLConnection 超时属性

    ConnectTimeout(ms)

    • a specified timeout value, in milliseconds, to be used when opening a communications link to the resource referenced by this URLConnection.
    • If the timeout expires before the connection can be established, a java.net.SocketTimeoutException is raised. A timeout of zero is interpreted as an infinite timeout.

    ReadTimeout(ms)

    • a specified timeout, in milliseconds.
    • A non-zero value specifies the timeout when reading from Input stream when a connection is established to a resource.
    • If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised.
    • A timeout of zero is interpreted as an infinite timeout

    RestTemplate 超时设置

    Command Line Args (不修改代码,启动时配置)

    覆盖 HttpURLConnection 默认设置.

    -Dsun.net.client.defaultConnectTimeout=<TimeoutInMiliSec>
    -Dsun.net.client.defaultReadTimeout=<TimeoutInMiliSec>
    

    使用 SimpleClientHttpRequestFactory 建立 HttpURLConnection

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.client.SimpleClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    
    @Configuration
    public class RestTemplateConfiguration {
        @Bean
        public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    
            SimpleClientHttpRequestFactory clientHttpRequestFactory
                    = new SimpleClientHttpRequestFactory();
            clientHttpRequestFactory.setConnectTimeout(10 * 1000);
            clientHttpRequestFactory.setReadTimeout(10 * 1000);
            return new RestTemplate(clientHttpRequestFactory);
        }
    }
    

    使用 HttpComponentsClientHttpRequestFactory 建立 HttpURLConnection(推荐)

    • org.springframework.http.client.HttpComponentsClientHttpRequestFactory
    • HttpComponentsClientHttpRequestFactory 的构造器和 setter 方法支持自定义配置的 org.apache.http.client.HttpClient
    • 推荐原因
      * 通过 HttpClient 的构建类 org.apache.http.impl.client.HttpClientBuilder.setConnectionManager(pollingConnectionManager)方法设置连接池
      * HttpClientBuilder.setDefaultRequestConfig 设置超时
      * HttpClientBuilder.setDefaultHeaders(headers) 设置默认 headers

    Java Config 实现

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    
    @Configuration
    public class RestTemplateConfiguration {
        @Bean
        public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
            HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
            httpRequestFactory.setConnectionRequestTimeout(30 * 1000);
            httpRequestFactory.setConnectTimeout(2 * 60 * 1000);
            httpRequestFactory.setReadTimeout(10 * 60 * 1000);
            return new RestTemplate(httpRequestFactory);
        }
    }
    

    Java Config with custom config properties

    • 避免超时配置与代码耦合, 独立设置
    • 同时也可使用配置中心, 动态设置超时时间
    rest.template.conn.connect-timeout=3000
    rest.template.conn.read-timeout=3000
    
    @Configuration
    public class RestTemplateConfig{
        @Bean
        @ConfigurationProperties(prefix = "rest.template.conn")
        public HttpComponentsClientHttpRequestFactory customHttpRequestFactory() {
            return new HttpComponentsClientHttpRequestFactory();
        }
    
        @Bean
        public RestTemplate customRestTemplate(){
            return new RestTemplate(customHttpRequestFactory());
        }
    }
    
  • 相关阅读:
    《架构真经》读后感2
    css的引入
    交流会发言
    css学习
    数据结构-哈希表、二叉排序数
    软工人学习日常
    Java包、类、方法、变量、常量命名规范
    数据库命名规范
    学生信息系统jsp界面
    学生信息系统servlet层
  • 原文地址:https://www.cnblogs.com/CoolSoul/p/11785021.html
Copyright © 2011-2022 走看看