OpenFeign超时时间设置不生效问题排查记录

 更新时间:2024年11月15日 09:02:31   作者:gesanri  
文章主要讲述了在升级Spring Boot 3后,发现配置文件中的OpenFeign超时时间设置不生效的问题,通过查看FeignClientFactoryBean类和FeignClientProperties类的源码,发现配置读取的方式发生了变化,从而导致超时时间设置不生效

OpenFeign超时时间设置不生效问题排查

最近升级springboot 3,突然发现配置文件中的openFeign的超时时间设置不生效了

之前配置

如下:

feign:
  client:
    config:
      default:
        connectTimeout: 3000
        readTimeout: 5000

查资料都是说ribbon或者hystrix的超时时间设置问题,但实际并不是,没办法,去看源码,在FeignClientFactoryBean这个类里的

protected void configureFeign(FeignClientFactory context, Feign.Builder builder) {
    FeignClientProperties properties = this.beanFactory != null ? (FeignClientProperties)this.beanFactory.getBean(FeignClientProperties.class) : (FeignClientProperties)this.applicationContext.getBean(FeignClientProperties.class);
    FeignClientConfigurer feignClientConfigurer = (FeignClientConfigurer)this.getOptional(context, FeignClientConfigurer.class);
    this.setInheritParentContext(feignClientConfigurer.inheritParentConfiguration());
    if (properties != null && this.inheritParentContext) {
        if (properties.isDefaultToProperties()) {
            this.configureUsingConfiguration(context, builder);
            this.configureUsingProperties((FeignClientProperties.FeignClientConfiguration)properties.getConfig().get(properties.getDefaultConfig()), builder);
            this.configureUsingProperties((FeignClientProperties.FeignClientConfiguration)properties.getConfig().get(this.contextId), builder);
        } else {
            this.configureUsingProperties((FeignClientProperties.FeignClientConfiguration)properties.getConfig().get(properties.getDefaultConfig()), builder);
            this.configureUsingProperties((FeignClientProperties.FeignClientConfiguration)properties.getConfig().get(this.contextId), builder);
            this.configureUsingConfiguration(context, builder);
        }
    } else {
        this.configureUsingConfiguration(context, builder);
    }

}

可以看到配置是从FeignClientProperties这里读的

完后进入这个类,发现注解

@ConfigurationProperties("spring.cloud.openfeign.client")

对比之前的版本,这个类的注解为

@ConfigurationProperties("feign.client")

所以问题很明显了,将配置改为

spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            connectTimeout: 3000
            readTimeout: 5000

问题解决

多说两句,其实除了看源码,直接看官网可能更直接一点

https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#timeout-handling

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java设计模式之建造者模式

    Java设计模式之建造者模式

    这篇文章介绍了Java设计模式之建造者模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • IDEA插件之mybatisx插件使用教程(超详细!)

    IDEA插件之mybatisx插件使用教程(超详细!)

    MybatisX 是一款基于IDEA的快速开发插件,为效率而生,下面这篇文章主要给大家介绍了关于IDEA插件之mybatisx插件使用的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • java sql ResultSet 之getRow()用法说明

    java sql ResultSet 之getRow()用法说明

    这篇文章主要介绍了java sql ResultSet 之getRow()用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • IDEA项目maven project没有出现plugins和Dependencies问题

    IDEA项目maven project没有出现plugins和Dependencies问题

    这篇文章主要介绍了IDEA项目maven project没有出现plugins和Dependencies问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • IDEA新建springboot项目时未生成pom.xml文件的解决操作

    IDEA新建springboot项目时未生成pom.xml文件的解决操作

    这篇文章主要给大家介绍了关于IDEA新建springboot项目时未生成pom.xml文件的解决操作方法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Spring中的AOP面向切面编程详解

    Spring中的AOP面向切面编程详解

    这篇文章主要介绍了Spring中的AOP面向切面编程详解,AOP 即面向切面编程,和 OOP面向对象编程类似,也是一种编程思想,AOP采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制等方面,需要的朋友可以参考下
    2024-01-01
  • Junit 5中@ParameterizedTest与@EnumSource结合使用

    Junit 5中@ParameterizedTest与@EnumSource结合使用

    今天小编就为大家分享一篇关于Junit 5中@ParameterizedTest与@EnumSource结合使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • RabbitMQ在Spring Boot中的使用步骤

    RabbitMQ在Spring Boot中的使用步骤

    在Spring Boot中使用RabbitMQ涉及多个步骤,包括配置、创建监听器和发送消息,下面给大家分享RabbitMQ在Spring Boot中的使用步骤,感兴趣的朋友一起看看吧
    2024-07-07
  • Java中静态类型检查是如何进行的实例思路详解

    Java中静态类型检查是如何进行的实例思路详解

    这篇文章主要介绍了Java中静态类型检查是如何进行的实例思路详解的相关资料,需要的朋友可以参考下
    2016-05-05
  • 聊聊finally中的代码一定会执行吗

    聊聊finally中的代码一定会执行吗

    通常在面试中,只要是疑问句一般答案都是“否定”的,因为如果是“确定”和“正常”的,那面试官就没有必要再问了嘛,本文想和大家聊聊finally中的代码一定会执行吗?,感兴趣的朋友跟着小编一起来看看吧
    2023-12-12

最新评论