最近写了一个自定义注解@OutHttp应用于方法其中包含参数url,但是测试和生产环境的url不一致。如果不通过动态参数的方法是无法适配测试和生产环境不一致的情况。
在项目中使用的配置中心是携程的apollo,如果了解过apollo的人都知道,spring在启动过程中将Apollo中的配置通过请求将数据获取到应用并放置在context 环境变量envrioment的propertySource中。而propertySource是一个Map接口,只要获取到key就可以获取到value。而spring提供了占位符的处理方法,可以通过占位符获取到key。
@OutHttp(url = "https://www.baidu.com")
QueryPersonInfoResponse queryPersoninfo(QueryPersonInfoRequest request);
@OutHttp(url = "${execute.url}")
QueryPigInfoResponse queryPiginfo(QueryPigInfoRequest request);
在上面的代码块中一种是写死的url,第二种是配置式的url。
可以通过以下代码同时支持两种配置方式的读取。
// 注意 context是上下文,可以通过注解的方式获取上下文
/**
* @AutoWired
* private ApplicationContext context;
*/
String url = outHttp.url();//outHttp是获取到的注解对象,如果获取到注解对象可以百度
//占位符处理器
PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${","}");
String urlDeal = helper.replacePlaceholders(url,key->{
return context.getEnvironment().getProperty(key);
});
这样处理后获取到的urlDeal,对于OutHttp注解的方法一返回的是https://www.baidu.com,方法二返回的是apollo种返回的配置信息。