[英]Can I configure a @FeignClient url using a properties/yml file with custom property name?
我想使用@FeignClient 根据运行的环境从属性中获取 URL 。 喜欢:我有test
、 dev
和prod
。 All these enviroment have different URL for example : test
: http://localhost:9000
dev
: http://localhost:8080
prod
: http://localhost:8181
@FeignClient(name = "my-test-servies", url = "${com.test.my.access.url}")
@RequestMapping(method = RequestMethod.GET, value = "/authors")
public interface MyFeignClient {
public List<Author> getAuthors();
}
这可行,但我希望根据环境更改 URL 属性。 当我使用单个属性文件时,我的 yml 属性文件如下:application.yml
com:
prod:
my:
access:
url: "http://localhost:8181"
test:
my:
access:
url: "http://localhost:9000"
dev:
my:
access:
url: "http://localhost:8080"
可以吗?如果可以; 如何?
是的,做一个工厂。
编辑: Class<T> clazz
是一个 Feign 接口。
public class FeignClientFactory {
public static <T> T build(final String url, Class<T> clazz) {
return Feign.builder().client(new OkHttpClient()).logger(new Slf4jLogger(clazz)).logLevel(Logger.Level.FULL)
.encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).target(clazz, url);
}
public static <T> T build(final String url, Class<T> clazz, ObjectMapper mapper) {
Assert.notNull(mapper, "The mapper can't be null !");
return Feign.builder().client(new OkHttpClient()).logger(new Slf4jLogger(clazz)).logLevel(Logger.Level.FULL)
.encoder(new JacksonEncoder(mapper)).decoder(new JacksonDecoder(mapper)).target(clazz, url);
}
public static <T> T buildWithInterceptor(final String url, Class<T> clazz, RequestInterceptor interceptor) {
return Feign.builder().client(new OkHttpClient()).logger(new Slf4jLogger(clazz)).logLevel(Logger.Level.FULL)
.encoder(new JacksonEncoder()).requestInterceptor(interceptor).decoder(new JacksonDecoder())
.target(clazz, url);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.