配置化Feign接口动态切换URL方式

 更新时间:2024年11月15日 08:41:43   作者:夷则sail  
本文介绍了在开发、测试和生产环境中使用Feign接口时,根据不同的环境动态切换调用URL的方法,通过在不同环境的配置文件中配置URL,并实现一个Feign拦截器来读取这些配置,从而实现URL的动态切换,这种方法避免了引入过多步骤,同时也保证了不同环境下的URL正确调用

配置化Feign接口动态切换URL

最近有一个项目,其中需要对外调用的Feign接口的地址在dev、test、pro环境中都不同,由于没有引入注册中心,所以要切换其调用url。

考虑了很多方式:比如以数据库存储然后根据profil-active的不同而动态读取,但是因为实现起来会引入较多步骤,就考虑到了根据配置文件的不同而在部署时动态加载。

步骤如下:

在不同环境的配置文件中都对url进行配置

定义配置类读取这些自定义的url配置

实现feign中的RequestInterceptor接口

将读取到的url和feign接口服务名映射为map,在调用feign接口是,feign拦截器会根据feign接口的定义的name找到对应url即可实现不同环境动态调用。

因为不同环境的配置文件中url不同,所以能调用到不同url。

@Configuration
public class FeignUrlInterceptor implements RequestInterceptor {

    private Map<String, String> feignUrlMap;

    @Autowired
    public FeignUrlInterceptor(FeignUrlConfig feignUrlConfig) {
        feignUrlMap = new HashMap<>();
        feignUrlMap.put(FeignConstant.TEXTSEG_FEIGN_NAME, feignUrlConfig.textsegUrl);
        feignUrlMap.put(FeignConstant.DOMAIN_FEIGN_NAME, feignUrlConfig.domainUrl);
    }


    /**
     * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
     *
     * @param template
     */
    @Override
    public void apply(RequestTemplate template) {
        String name = template.feignTarget().name();
        //System.out.println("name:" + name + "-----------------------------------------------------------------");
        String url = this.feignUrlMap.get(name);
        //System.out.println("url:" + url + "-----------------------------------------------------------------");
        template.target(url);
    }
}

需要注意的是:

RequestInterceptor接口对所有feign接口都有效。

以上,在开发、测试等环境的配置文件配置不同feign接口的url时,部署在响应环境的服务即调用响应的url。

不同环境的配置文件配置不同feign接口的url时,部署在相应环境的服务即调用相应的url。

当然,如果能有注册中心更方便实现。

总结

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

相关文章

  • JAVA基础之控制台输入输出的实例代码

    JAVA基础之控制台输入输出的实例代码

    下面小编就为大家带来一篇JAVA基础之控制台输入输出的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • SpringBoot基于Mybatis-Plus自动代码生成

    SpringBoot基于Mybatis-Plus自动代码生成

    这篇文章主要介绍了SpringBoot基于Mybatis-Plus自动代码生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Springboot项目因为kackson版本问题启动报错解决方案

    Springboot项目因为kackson版本问题启动报错解决方案

    这篇文章主要介绍了Springboot项目因为kackson版本问题启动报错解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java中的LinkedHashMap及LRU缓存机制详解

    Java中的LinkedHashMap及LRU缓存机制详解

    这篇文章主要介绍了Java中的LinkedHashMap及LRU缓存机制详解,LinkedHashMap继承自HashMap,它的多种操作都是建立在HashMap操作的基础上的,同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序,需要的朋友可以参考下
    2023-09-09
  • 使用java编程从0到1实现一个简单计算器

    使用java编程从0到1实现一个简单计算器

    这篇文章主要介绍了使用java编程从0到1实现一个简单计算器,文章中用代码实例讲解的很清晰,有感兴趣的同学可以学习研究下
    2021-02-02
  • SpringBoot连接Redis集群教程

    SpringBoot连接Redis集群教程

    这篇文章主要介绍了SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Java中的ObjectOutputStream类使用

    Java中的ObjectOutputStream类使用

    ObjectOutputStream是Java.io包中的一个类,用于将Java对象的状态信息序列化为字节流,序列化是将对象状态转换为字节流的过程,反序列化则是将字节流恢复为对象,本文介绍了ObjectOutputStream的原理、主要方法、使用步骤以及注意事项
    2024-09-09
  • RocketMQ延迟消息简明介绍

    RocketMQ延迟消息简明介绍

    这篇文章主要介绍了RocketMQ延迟消息,延迟消息是个啥?顾名思义,就是等一段时间再消费的消息。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java二级缓存之提升Hibernate应用性能的关键详解

    Java二级缓存之提升Hibernate应用性能的关键详解

    这篇文章主要介绍了Java二级缓存之提升Hibernate应用性能的关键,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • 十分钟速懂java知识点 System类

    十分钟速懂java知识点 System类

    这篇文章主要介绍了java知识点System类,根据一次面试总结的,可以十分钟速懂System类,感兴趣的小伙伴们可以参考一下
    2015-12-12

最新评论