方式一、亲测可用,缺点是每个类都需要单独配置
@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 {
@Override
public void apply(RequestTemplate requestTemplate) {
//根据开关,动态调整url
MyProperties 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;
@Autowired
private EnergyCloudAdminFeignClient energyCloudAdminFeignClient;
public void testMethod() {
// 实现动态指定URI
JSONObject jsonObject = energyCloudAdminFeignClient.getCurrUser(new URI(url), headers, bodies);
}
}