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

总结

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

相关文章

  • Spring实现IoC的多种方式小结

    Spring实现IoC的多种方式小结

    本篇文章主要介绍了Spring实现IoC的多种方式小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • JAVASE精密逻辑控制过程详解(分支和循环语句)

    JAVASE精密逻辑控制过程详解(分支和循环语句)

    在一个程序执行的过程中各条语句的执行顺序对程序的结果是有直接影响的,这篇文章主要给大家介绍了关于JAVASE精密逻辑控制(分支和循环语句)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • logback 自定义Pattern模板教程

    logback 自定义Pattern模板教程

    这篇文章主要介绍了logback 自定义Pattern模板教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 一文搞懂Spring Bean中的作用域和生命周期

    一文搞懂Spring Bean中的作用域和生命周期

    Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。了解Spring Bean的作用域与生命周期是非常必要的,快跟随小编一起学习学习吧
    2022-06-06
  • SpringBoot集成MyBatis对管理员的查询操作

    SpringBoot集成MyBatis对管理员的查询操作

    本文主要介绍了SpringBoot集成MyBatis对管理员的查询操作,实现增删改查中的查询操作,对所有的普通管理员进行查询操作,感兴趣的可以了解一下
    2023-11-11
  • 解决@RequestBody部分属性丢失的问题

    解决@RequestBody部分属性丢失的问题

    这篇文章主要介绍了解决@RequestBody部分属性丢失的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 一文搞懂Java的SPI机制(推荐)

    一文搞懂Java的SPI机制(推荐)

    Java定义了一套JDBC的接口,但并未提供具体实现类,而是在不同云厂商提供的数据库实现包。这篇文章给大家介绍Java的SPI机制,感兴趣的朋友一起看看吧
    2021-11-11
  • java网络通信技术之简单聊天小程序

    java网络通信技术之简单聊天小程序

    这篇文章主要为大家详细介绍了java网络通信技术之简单聊天小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Java实现归并排序的示例代码

    Java实现归并排序的示例代码

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。本文将用Java实现这一排序,需要的可以参考一下
    2022-08-08
  • Java基于ip2region.xdb数据库从IP获取到属地解析的全攻略

    Java基于ip2region.xdb数据库从IP获取到属地解析的全攻略

    在日常的Java开发中,IP地址相关的操作是非常常见的需求,无论是用户行为分析、地域化服务,还是安全防护,都需要精准地获取和解析IP信息,本文将详细介绍一个功能完善的Java IP工具类,需要的朋友可以参考下
    2026-02-02

最新评论