WebService接口动态发布
背景
WebService接口经常会碰到不同环境接口展示的地址不同。
如下:
我们不同环境需要访问不同的baseURL,那么如何去动态配置呢?
发布类实现ApplicationRunner接口
在WebService接口的动态发布类中实现ApplicationRunner接口,并实现接口方法,能够在服务启动后,执行该方法进行接口的发布。
实现逻辑
## 1. 配置BaseUrl,博主是微服务,配置中心中不同环境可以自动加载不同的配置文件,不同配置文件中配置对应的BaseUrl即可。
## 2. 添加拦截器,如果在WebService中存在拦截器,那么需要使用自动注入将拦截器先引入进来。
例如:
@Autowired
private WebServiceAuthInterceptor interceptor;
## 3. 发布接口拼接URL。
代码实现
/***
* @desc <发布所有webService接口的初始化方法>
* <功能详细描述>
* @param
* @date 2023年11月15日 17:10
* @return void
* @exception
*/
public void run(ApplicationArguments args) throws Exception {
Reflections reflections = new Reflections(WEB_SERVICE_BASE_PACKAGE_NAME);
Set> webServiceClasses = reflections.getTypesAnnotatedWith(WebService.class);
List> interceptors = new ArrayList<>();
interceptors.add(interceptor);
// 处理获取到的WebService类
for (Class webServiceClass : webServiceClasses) {
if (!webServiceClass.isInterface()) { //判断如果不是接口,则发布webService
String serviceName = webServiceClass.getAnnotation(WebService.class).serviceName();
String requestUrl = getWayBaseUrl + Bus.DEFAULT_BUS_ID + "/" + serviceName;
EndpointImpl endpoint = new EndpointImpl(springBus(), applicationContext.getBean(webServiceClass));
endpoint.setInInterceptors(interceptors);
endpoint.setPublishedEndpointUrl(requestUrl);
endpoint.publish(serviceName);
}
}
}
前提需要对应的WebSerive实现类已经注入到了Spring中。
License:
CC BY 4.0