FeignClientBuilder自定義生成FeignClient


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

public class FeignClientCreateUtils {
    //緩存已經生成的FeignClient
    private static Map<String, Object> cacheFeignClient = new ConcurrentHashMap<>();

    private static FeignClientBuilder builder;

    public static <T> T getFeignClient(Integer systemId, Class<T> 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<T> 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);
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM