阅读 203

FeignClientBuilder自定义生成FeignClient

spring-cloud-openfeign-core包下提供了FeignClientBuilder类,可以在不使用@FeignClient注解的情况下手动生成FeignClient

public class FeignClientCreateUtils {
    //缓存已经生成的FeignClient
    private static Map cacheFeignClient = new ConcurrentHashMap<>();

    private static FeignClientBuilder builder;

    public static  T getFeignClient(Integer systemId, Class clazz) {

        SystemInfoDto systemInfo = ErpSystemBrandUtils.getSystemInfo(systemId);
        FeignClient feignClient = clazz.getAnnotation(FeignClient.class);
        //先从缓存查找
        if (cacheFeignClient.containsKey(systemInfo.getSystemNameEn() + feignClient.contextId())) {
            return (T) cacheFeignClient.get(systemInfo.getSystemNameEn() + feignClient.contextId());
        }

        FeignClientBuilder.Builder erpFeignClient = builder.forType(clazz, systemInfo.getSystemNameEn().toLowerCase());
        T feign = erpFeignClient.contextId(feignClient.contextId()).path(feignClient.path()).build();
        cacheFeignClient.put(systemInfo.getSystemNameEn() + feignClient.contextId(), feign);
        return feign;
    }

    /**
     * 通过spring applicationContext生成builder
     * @param applicationContext
     */
    public static void init(ApplicationContext applicationContext) {
        if (null == builder) {
            builder = new FeignClientBuilder(applicationContext);
        }
    }
}

原文:https://www.cnblogs.com/wangmengmengm/p/15307322.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐