application.properties:

1 #代理设置
2 proxy.enabled=false
3 proxy.host=192.168.18.233
4 proxy.port=8888
5
6 #REST超时配置
7 rest.ReadTimeout=35000
8 rest.ConnectTimeout=5000

代理配置类:

 1 import org.springframework.boot.context.properties.ConfigurationProperties;
 2 import org.springframework.stereotype.Component;
 3
 4 import lombok.Data;
 5
 6 /**
 7  * 网络代理设置
 8  *
 9  * @author yangzhilong
10  *
11  */
12 @Component
13 @ConfigurationProperties(prefix="proxy")
14 @Data
15 public class ProxyConfig {
16     /**
17      * 是否启用代理
18      */
19     private Boolean enabled;
20     /**
21      * 代理主机地址
22      */
23     private String host;
24     /**
25      * 代理端口
26      */
27     private Integer port;
28 }

SpringBoot的Configuration:

 1 import java.net.InetSocketAddress;
 2 import java.net.Proxy;
 3 import java.net.SocketAddress;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.beans.factory.annotation.Value;
 7 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 8 import org.springframework.context.annotation.Bean;
 9 import org.springframework.context.annotation.Configuration;
10 import org.springframework.http.client.SimpleClientHttpRequestFactory;
11 import org.springframework.web.client.RestTemplate;
12
13 import com.yzl.vo.ProxyConfig;
14
15 @Configuration
16 @ConditionalOnClass(ProxyConfig.class)
17 public class RestConfiguration {
18     @Value("${rest.ReadTimeout}")
19     private int readTimeout;
20     @Value("${rest.ConnectTimeout}")
21     private int connectionTimeout;
22     @Autowired
23     private ProxyConfig proxyConfig;
24
25     @Bean
26     public SimpleClientHttpRequestFactory httpClientFactory() {
27         SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
28         httpRequestFactory.setReadTimeout(readTimeout);
29         httpRequestFactory.setConnectTimeout(connectionTimeout);
30
31         if(proxyConfig.getEnabled()){
32             SocketAddress address = new InetSocketAddress(proxyConfig.getHost(), proxyConfig.getPort());
33             Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
34             httpRequestFactory.setProxy(proxy);
35         }
36
37         return httpRequestFactory;
38     }
39
40     @Bean
41     public RestTemplate restTemplate(SimpleClientHttpRequestFactory httpClientFactory) {
42         RestTemplate restTemplate = new RestTemplate(httpClientFactory);
43         return restTemplate;
44     }
45 }

如果不希望这种全局的超时时间污染正常的SpringCloud中restTemplate的时间设置,可以使用如下方法:

 1 package com.yzl.autoconfig;
 2
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.context.annotation.Bean;
 5 import org.springframework.context.annotation.Configuration;
 6 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 7 import org.springframework.web.client.RestTemplate;
 8
 9 import com.yzl.util.RestClient;
10
11 /**
12  * 工具类引导装配类
13  * @author yangzhilong
14  *
15  */
16 @Configuration
17 public class RestClientAutoConfiguration {
18     @Value("${rest.config.connectTimeout:10000}")
19     private int connectTimeout;
20     @Value("${rest.config.readTimeout:30000}")
21     private int readTimeout;
22
23     /**
24      * 使用Bootstrap来装配RestClient中的RestTemplate属性,
25      * 避免直接装配RestTemplate来污染了正常的spring Cloud的调用
26      * @return
27      */
28     @Bean
29     public RestClientBootstrap bootstrap(){
30         HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
31         httpRequestFactory.setConnectTimeout(connectTimeout);
32         httpRequestFactory.setReadTimeout(readTimeout);
33         RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
34         RestClient.setRestTemplate(restTemplate);
35         return new RestClientBootstrap();
36     }
37
38     /**
39      * 空的引导类
40      * @author yangzhilong
41      *
42      */
43     static class RestClientBootstrap {
44
45     }
46 }

RestClient工具类:

 1 package com.yzl.util;
 2
 3 import java.util.Map;
 4
 5 import org.springframework.http.HttpEntity;
 6 import org.springframework.http.HttpHeaders;
 7 import org.springframework.http.HttpMethod;
 8 import org.springframework.http.MediaType;
 9 import org.springframework.util.LinkedMultiValueMap;
10 import org.springframework.util.MultiValueMap;
11 import org.springframework.web.client.RestTemplate;
12
13 import com.alibaba.fastjson.JSON;
14
15 /**
16  * HTTP请求帮助类
17  * @author yangzhilong
18  *
19  */
20 public class RestClient {
21
22     private static RestTemplate restTemplate;
23
24     /**
25      * 注入实现类
26      * @param client
27      */
28     public static void setRestTemplate(RestTemplate client) {
29         restTemplate = client;
30     }
31     /**
32      * 无参数或者参数附带在url中
33      * @param url
34      * @return
35      */
36     public static String get(String url) {
37         return restTemplate.getForObject(url , String.class);
38     }
39
40     /**
41      * json格式的post提交
42      * @param obj
43      * @param url
44      * @return
45      */
46     public static String postJson(String url, Object obj) {
47         HttpHeaders headers = new HttpHeaders();
48         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
49         headers.setContentType(type);
50         headers.add("Accept", MediaType.APPLICATION_JSON.toString());
51         String result = null;
52         if(obj == null){
53             result = "{}";
54         }else{
55             result = JSON.toJSONString(obj);
56         }
57         HttpEntity<String> formEntity = new HttpEntity<String>(result,headers);
58         return restTemplate.postForObject(url , formEntity, String.class);
59     }
60
61     /**
62      * form格式的post提交
63      * @param map
64      * @param url
65      * @return
66      */
67     public static String postForm(String url, Map<String , String> map){
68         HttpHeaders headers = new HttpHeaders();
69         headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
70         MultiValueMap<String, String> params= new LinkedMultiValueMap<>();
71         for(Map.Entry<String ,String> me : map.entrySet()){
72             params.add(me.getKey() , me.getValue());
73         }
74         HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
75         return restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class).getBody();
76     }
77
78 }

然后实际发起HTTP请求的时候使用上面的工具类

SpringBoot配置RestTemplate的代理和超时时间相关推荐

  1. 【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )

    文章目录 I ServerSocket 端口号绑定参数 II ServerSocket 复用绑定端口设置 III ServerSocket 设置缓冲区大小 IV ServerSocket 设置超时时间 ...

  2. RestTemplate 设置超时时间

    项目访问量大,频繁调取其他系统接口经常出现项目后台假死现象,发现其他系统掉线重启一段时间必现.查看调用接口,同事直接引用了RestTemplate但是没有设置超时时间->_<-. 两种方式 ...

  3. Feign客户端 - 超时时间配置

    Spring Cloud中Feign客户端是默认开启支持Ribbon的,最重要的两个超时就是连接超时ConnectTimeout和读超时ReadTimeout,在默认情况下,也就是没有任何配置下,Fe ...

  4. nginx限制上传大小和超时时间设置说明/php限制上传大小

    现象说明: 在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了! 原因是nginx配置里限制了上传文件的大小 client_ ...

  5. 基于CentOS 7配置Nginx正向代理

    Nginx是一款以轻量级.低内存开销.支持缓存.支持反向代理,负载均衡,电子邮件服务而著称.对于鲜为人知的是,它还可以作为一个简单易用的正向代理服务器.本文简要描述这个正向代理功能并给出演示,供大家参 ...

  6. 新功能:阿里云负载均衡SLB支持HTTP/HTTPS超时时间自定义功能

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 大家好,很高兴的告诉大家,阿里云负载均衡SLB已经在新加坡.澳大利亚(悉尼).马来西亚(吉隆坡).日本(东京).美国( ...

  7. 修改oracle的连接时间,如何显式修改数据库连接超时时间

    spring + mybatis redis.incr(key); //redis计数加一 try{ dbOPerHere(); //数据库操作 }catch (Exception e){ //若数据 ...

  8. httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...

    [SpringBoot WEB 系列]RestTemplate 之超时设置 一般来讲我们访问外部资源时,需要做一个保护,比如最常见的添加一个超时设置,避免一直被阻塞,RestTemplate 可以通过 ...

  9. spring接口超时时间配置

    现象:接口默认1min超时,超过时间直接504 考虑到业务,存在超级慢的接口,需要调大超时时间.网上一搜-一言难尽- 大部分文章都提到以下两个配置spring.mvc.async.request-ti ...

最新文章

  1. EF6学习笔记五:继承三策略
  2. mac下java配置填坑
  3. 常考数据结构和算法:合并有序链表
  4. 【实验手册】使用Visual Studio Code 开发.NET Core应用程序
  5. 高性能访客记录系统如何设计?
  6. 云服务器如何重新引导,重新启动server服务器
  7. HTML转义字符大全(转)
  8. android dagger2 单例,Dagger2进阶-单例
  9. TNF5SLNO 华为OSN1800全新原包装4路STM-16,8路STM-4或8路STM-1光接口板
  10. OpenCV:边缘检测算法
  11. delphi mysql.pas_Delphi 一些pas
  12. 方正飞鸿FIX ES2007荣获大连软交会创新产品奖
  13. 博士读一半,导师跳槽了!博士生把亲身经历发在了Science上
  14. windows和ubuntu双系统,ubuntu下硬盘变成只读状态,无法粘贴文件的有效解决方法
  15. Python3中print函数的换行
  16. iOS一键搞定自动打包并发布到AppStore和Fir
  17. python md5加密和统一社会信用代码_统一社会信用代码校验位python实现
  18. 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)
  19. 在国内考是考CISP还是CISSP呢?
  20. office卸载之后重新安装,重载Endnote的办法

热门文章

  1. 荣耀v30搭载鸿蒙,荣耀30和V30系列首批搭载Magic UI 4.0,可升鸿蒙2.0
  2. framset和fram的嵌套
  3. matlab动态图最新存储文件,MATLAB 动图绘制、保存
  4. mongodb数据库显示obj_MongoDB创建和查看数据库
  5. 美国大学计算机与信息科学,【计算机学术讲堂】美国福特汉姆大学计算机与信息科学系Md Zakirul Alam Bhuiyan博士莅临我院作学术报告...
  6. php 设置 最大内存,修改PHP的memory_limit限制的方法分享
  7. fwOA获取当前用户信息及常用数据库表
  8. sqlserver中某列转成以逗号连接的字符串及逆转、数据行转列列转行
  9. es的doc_value对排序字段的作用
  10. redisTemplate的hscan方法中为何不需要指定游标开始地址的原因