SpringBoot配置RestTemplate的代理和超时时间
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的代理和超时时间相关推荐
- 【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )
文章目录 I ServerSocket 端口号绑定参数 II ServerSocket 复用绑定端口设置 III ServerSocket 设置缓冲区大小 IV ServerSocket 设置超时时间 ...
- RestTemplate 设置超时时间
项目访问量大,频繁调取其他系统接口经常出现项目后台假死现象,发现其他系统掉线重启一段时间必现.查看调用接口,同事直接引用了RestTemplate但是没有设置超时时间->_<-. 两种方式 ...
- Feign客户端 - 超时时间配置
Spring Cloud中Feign客户端是默认开启支持Ribbon的,最重要的两个超时就是连接超时ConnectTimeout和读超时ReadTimeout,在默认情况下,也就是没有任何配置下,Fe ...
- nginx限制上传大小和超时时间设置说明/php限制上传大小
现象说明: 在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了! 原因是nginx配置里限制了上传文件的大小 client_ ...
- 基于CentOS 7配置Nginx正向代理
Nginx是一款以轻量级.低内存开销.支持缓存.支持反向代理,负载均衡,电子邮件服务而著称.对于鲜为人知的是,它还可以作为一个简单易用的正向代理服务器.本文简要描述这个正向代理功能并给出演示,供大家参 ...
- 新功能:阿里云负载均衡SLB支持HTTP/HTTPS超时时间自定义功能
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 大家好,很高兴的告诉大家,阿里云负载均衡SLB已经在新加坡.澳大利亚(悉尼).马来西亚(吉隆坡).日本(东京).美国( ...
- 修改oracle的连接时间,如何显式修改数据库连接超时时间
spring + mybatis redis.incr(key); //redis计数加一 try{ dbOPerHere(); //数据库操作 }catch (Exception e){ //若数据 ...
- httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...
[SpringBoot WEB 系列]RestTemplate 之超时设置 一般来讲我们访问外部资源时,需要做一个保护,比如最常见的添加一个超时设置,避免一直被阻塞,RestTemplate 可以通过 ...
- spring接口超时时间配置
现象:接口默认1min超时,超过时间直接504 考虑到业务,存在超级慢的接口,需要调大超时时间.网上一搜-一言难尽- 大部分文章都提到以下两个配置spring.mvc.async.request-ti ...
最新文章
- EF6学习笔记五:继承三策略
- mac下java配置填坑
- 常考数据结构和算法:合并有序链表
- 【实验手册】使用Visual Studio Code 开发.NET Core应用程序
- 高性能访客记录系统如何设计?
- 云服务器如何重新引导,重新启动server服务器
- HTML转义字符大全(转)
- android dagger2 单例,Dagger2进阶-单例
- TNF5SLNO 华为OSN1800全新原包装4路STM-16,8路STM-4或8路STM-1光接口板
- OpenCV:边缘检测算法
- delphi mysql.pas_Delphi 一些pas
- 方正飞鸿FIX ES2007荣获大连软交会创新产品奖
- 博士读一半,导师跳槽了!博士生把亲身经历发在了Science上
- windows和ubuntu双系统,ubuntu下硬盘变成只读状态,无法粘贴文件的有效解决方法
- Python3中print函数的换行
- iOS一键搞定自动打包并发布到AppStore和Fir
- python md5加密和统一社会信用代码_统一社会信用代码校验位python实现
- 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)
- 在国内考是考CISP还是CISSP呢?
- office卸载之后重新安装,重载Endnote的办法
热门文章
- 荣耀v30搭载鸿蒙,荣耀30和V30系列首批搭载Magic UI 4.0,可升鸿蒙2.0
- framset和fram的嵌套
- matlab动态图最新存储文件,MATLAB 动图绘制、保存
- mongodb数据库显示obj_MongoDB创建和查看数据库
- 美国大学计算机与信息科学,【计算机学术讲堂】美国福特汉姆大学计算机与信息科学系Md Zakirul Alam Bhuiyan博士莅临我院作学术报告...
- php 设置 最大内存,修改PHP的memory_limit限制的方法分享
- fwOA获取当前用户信息及常用数据库表
- sqlserver中某列转成以逗号连接的字符串及逆转、数据行转列列转行
- es的doc_value对排序字段的作用
- redisTemplate的hscan方法中为何不需要指定游标开始地址的原因