方式一、亲测可用,缺点是每个类都需要单独配置
@FeignClient(value = "my-biz", url = "${external.my.biz_url}", configuration = FeignHeaderInterceptor.class) public interface MyBizFeign {}@Data @Component @RefreshScope @ConfigurationProperties(prefix = "ifc") public class MyProperties {/** 是否使用冒烟url */private boolean useSmokeUrl;/** 冒烟地址 */private String smokeUrl; }@Slf4j public class FeignHeaderInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {//根据开关,动态调整urlMyProperties properties = SpringUtil.getBean(MyProperties .class);if (null != properties && properties .isUseSmokeUrl()) {requestTemplate.target(ifcProperties.getSmokeUrl());}// 添加header请求头log.debug("request feign请求,添加header头信息~~");requestTemplate.header("X-SOURCE-SYSTEM", SYS_NAME);} }
方式二、没测过
@FeignClient(name = "energyCloudAdminFeignClient", url = "${energy.cloud.url}") public interface EnergyCloudAdminFeignClient {@GetMapping("/sys/user/getCurrUser")JSONObject getCurrUser(URI uri, @RequestHeader MultiValueMap<String, String> headers, @RequestParam Map<String, String> bodies); }
@Service @RefreshScope @Slf4j public class SysUserOtherAppService {@Value("${energy.cloud.url}")private String url;@Autowiredprivate EnergyCloudAdminFeignClient energyCloudAdminFeignClient;public void testMethod() {// 实现动态指定URIJSONObject jsonObject = energyCloudAdminFeignClient.getCurrUser(new URI(url), headers, bodies);}}