记-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());
    }
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐