配置化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。

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

总结

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

相关文章

  • android中GridView的用法示例

    android中GridView的用法示例

    这篇文章主要介绍了android中GridView的用法,对于Android初学者很有参考学习价值,需要的朋友可以参考下
    2014-08-08
  • mybatis 事务回滚配置操作

    mybatis 事务回滚配置操作

    这篇文章主要介绍了mybatis 事务回滚配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • MyBatis-Plus使用sl4j日志打印SQL的代码详解

    MyBatis-Plus使用sl4j日志打印SQL的代码详解

    以下是关于使用 Spring Boot 起始器替换 slf4j-api 和 logback 依赖的详细步骤和注意事项,包括 MyBatis-Plus 的默认日志级别信息,需要的朋友可以参考下
    2024-10-10
  • Spring自定义注解的实现与使用方式

    Spring自定义注解的实现与使用方式

    注解是Java中用于类、方法、参数、包的装饰标志,本身不具备功能,但可定义参数,Java包含内建注解和元注解,如@Target、@Retention等,描述注解的使用范围和生命周期,Spring的AOP(面向切面编程)可以结合注解实现功能,如权限控制和日志记录
    2024-09-09
  • DecimalFormat多种用法详解

    DecimalFormat多种用法详解

    这篇文章主要为大家详细介绍了DecimalFormat的多种用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • eclipse+jdk安装以及会遇到的问题及解决方法

    eclipse+jdk安装以及会遇到的问题及解决方法

    这篇文章主要介绍了eclipse+jdk安装以及会遇到的问题+解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • springmvc fastjson 反序列化时间格式化方法(推荐)

    springmvc fastjson 反序列化时间格式化方法(推荐)

    下面小编就为大家带来一篇springmvc fastjson 反序列化时间格式化方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java事务管理学习之Hibernate详解

    Java事务管理学习之Hibernate详解

    hibernate是jdbc轻量级的封装,本身不具备事务管理的能力,在事物管理层面,一般是委托于底层的jdbc和jta来完成调度的。下面这篇文章主要给大家介绍了Java事务管理学习之Hibernate的相关资料,需要的朋友可以参考下。
    2017-03-03
  • 5个并发处理技巧代码示例

    5个并发处理技巧代码示例

    这篇文章主要介绍了5个并发处理技巧代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • IDEA自定义Maven archetype的方法步骤

    IDEA自定义Maven archetype的方法步骤

    在创建Maven的项目时我们发现了一个很不方便的问题,就是每次创建Maven的工程的时候,都需要选择一个骨架,本文主要介绍了IDEA自定义Maven archetype的方法步骤,感兴趣的可以了解一下
    2022-03-03

最新评论