记-RestTemplate连接超时时间设置不生效问题

记-RestTemplate连接超时时间设置不生效问题

一、前言

springboot 2.x默认不再向容器中注入RestTemplate对象,需要使用者根据RestTemplateBuilder手动配置RestTemplate对象;但是RestTemplateBuilder有些奇葩,大部分赋值方法都会创建新的RestTemplateBuilder实例!!!这不合常规啊,不清楚的很容易用错,导致设置的属性不生效。真的🐶

各位大佬有谁知道,RestTemplateBuilder为什么这么做的,烦请留言告知下?

二、错误示例

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        builder.setConnectTimeout(Duration.ofSeconds(10));
        builder.setReadTimeout(Duration.ofSeconds(120));
        return builder.build();
    }

超时时间

三、正确用法

    /**
     * @see org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration
     */
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        final RestTemplateBuilder restTemplateBuilder = builder.setConnectTimeout(Duration.ofSeconds(10)).setReadTimeout(Duration.ofSeconds(120));
        final RestTemplate restTemplate = restTemplateBuilder.build();
        return restTemplate;
    }

在这里插入图片描述

四、RestTemplateCustomizer个性化配置示例

    @Bean
    public RestTemplateCustomizer restTemplateCustomizer() {
        return restTemplate -> restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
    }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 设置RestTemplate超时时间的方式有多种,你可以使用ClientHttpRequestFactory、HttpComponentsClientHttpRequestFactory和SimpleClientHttpRequestFactory等方式来设置超时时间。 ### 回答2: RestTemplate是Spring框架提供的用于进行HTTP请求的工具类,通过它可以方便地发送各种类型的HTTP请求并获取响应结果。在使用RestTemplate发送HTTP请求时,有时需要设置超时时间来控制请求的最大等待时间,以避免请求因等待时间过长导致的效率低下或系统阻塞。 RestTemplate设置超时时间可以通过以下两种方式进行: 1. HttpComponentsClientHttpRequestFactory方式: ```java // 创建HttpComponentsClientHttpRequestFactory实例 HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); // 设置连接超时时间(单位:毫秒) factory.setConnectTimeout(5000); // 设置读取超时时间(单位:毫秒) factory.setReadTimeout(5000); // 创建RestTemplate实例,并将HttpComponentsClientHttpRequestFactory实例设置为其请求工厂 RestTemplate restTemplate = new RestTemplate(factory); ``` 2. SimpleClientHttpRequestFactory方式: ```java // 创建SimpleClientHttpRequestFactory实例 SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); // 设置连接超时时间(单位:毫秒) factory.setConnectTimeout(5000); // 设置读取超时时间(单位:毫秒) factory.setReadTimeout(5000); // 创建RestTemplate实例,并将SimpleClientHttpRequestFactory实例设置为其请求工厂 RestTemplate restTemplate = new RestTemplate(factory); ``` 上述代码中,使用HttpComponentsClientHttpRequestFactory或SimpleClientHttpRequestFactory创建实例,并通过setConnectTimeout和setReadTimeout方法设置连接超时时间和读取超时时间,单位都是毫秒。然后将创建的请求工厂实例设置RestTemplate实例,从而实现对HTTP请求的超时时间进行设置。 以此设置超时时间后,RestTemplate在发送HTTP请求时,如果请求等待时间超过设置超时时间,将会抛出SocketTimeoutException异常,开发者可以根据需要进行相应的处理。 ### 回答3: 在使用RestTemplate发送HTTP请求时,可以通过设置超时时间来控制请求的响应时间RestTemplate是Spring框架中的一个HTTP请求客户端,它提供了一些用于发送HTTP请求的方法。要设置RestTemplate超时时间,可以通过修改其底层的HttpClient或OkHttpClient实例来实现。下面给出两种方法来设置RestTemplate超时时间。 方法一:通过修改HttpClient实例来设置超时时间。 ```java // 创建HttpComponentsClientHttpRequestFactory实例 HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); // 设置连接超时时间 factory.setConnectTimeout(5000); // 设置读取超时时间 factory.setReadTimeout(5000); // 创建RestTemplate实例,并设置其RequestFactory属性为HttpComponentsClientHttpRequestFactory实例 RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(factory); ``` 方法二:通过修改OkHttpClient实例来设置超时时间。 ```java // 创建OkHttpClient.Builder实例 OkHttpClient.Builder builder = new OkHttpClient.Builder(); // 设置连接超时时间 builder.connectTimeout(5, TimeUnit.SECONDS); // 设置读取超时时间 builder.readTimeout(5, TimeUnit.SECONDS); // 创建OkHttpClient实例 OkHttpClient client = builder.build(); // 创建OkHttp3ClientHttpRequestFactory实例,并设置其OkHttpClient属性为上面创建的OkHttpClient实例 OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(client); // 创建RestTemplate实例,并设置其RequestFactory属性为OkHttp3ClientHttpRequestFactory实例 RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(factory); ``` 通过以上两种方法,我们可以根据需要设置RestTemplate连接超时时间和读取超时时间,来控制请求的响应时间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值