离谱!RestTemplate默认竟然没有超时时间

项目有一个使用restTemplate来调用第三方接口的功能,用了默认配置,没有设置超时时间。在某一天这个功能不好用了,后来查了下原因,发现是第三方系统的接口一直没有响应,导致我们系统一直卡住等待响应。

按我们正常的思维,如果一个接口一直没有响应,肯定会有超时处理啊,为什么会一直傻傻的等着呢?是的当时我也是这样想的,但是现实往往喜欢跟你开玩笑,restTemplate默认就是没有超时的,需要手动设置的。。。真是太坑啦!

查看了下SimpleClientHttpRequestFactory的源码,发现connectTimeout与readTimeout变量中给的值都是-1,这就代表着默认超时时间是没有限制的。

所以要怎么设置超时时间呢?以下时设置的方法:

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SkipHostnameVerificationHttpRequestFactory();
        factory.setReadTimeout(3000);
        factory.setConnectTimeout(2000);
        return factory;
    }

在RestTemplate的配置类中给SimpleClientHttpRequestFactory设置超时:

其中factory.setReadTimeout(3000);是设置响应时间;

 factory.setConnectTimeout(2000);是连接超时时间

设置完之后,重新部署,再请求三方接口超过3秒没响应就会触发超时了,不会在傻傻的一直等待响应。问题解决!

你可能感兴趣的:(java,spring,开发语言)