avatar

十六小站

欢迎来到我的个人主页! 期待与您分享我的经验与故事,一起探索技术的无穷可能!

  • 首页
  • NAS专题
  • 关于
Home WebService接口动态发布
文章

WebService接口动态发布

Posted 2023-11-23 Updated 2024-10- 19
By 十六 已删除用户
5~6 min read

背景

WebService接口经常会碰到不同环境接口展示的地址不同。 如下: file 我们不同环境需要访问不同的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
Share

Further Reading

Dec 16, 2025

异步通知中事务的处理

公司项目之前因为涉及到国产化自主可控改造 ,所以将数据库从oracle换成了性能相对低很多的国产数据库,所以设计了分库分表的方案 。有分必有合,那么在设计到台账之类的集团公司查询的时候就会存在聚合查询的问题。所以引入了es,其方案如下 : 原数据同步方案 由于可能存在事务问题,此处使用了MQ的延迟队

Nov 28, 2025

线程池优化

前言 博主公司的项目一直有一个问题 ,跑时间长了会非常卡顿 ,必须要重启才能解决任务 ,之前没空排查问题 ,现在终于有时间来排查和解决这个问题了 。 打印jvm的dump信息辅助排查 先找到进程id:jps 打印堆栈信息输出到文件:jsatck -l [进程id] > /tmp/jvm.dump 分

Sep 30, 2025

微服务之Auth篇

auth服务重要是认证授权,签发jwt token使用。 生成密钥对 # 在项目 src/main/resources 下生成 jwt.jks(演示用,生产用更严格的密码/keystore) keytool -genkeypair \ -alias jwt \ -keyalg RSA \

OLDER

群晖搭建iSCSI服务

NEWER

Springboot环境下的启动参数说明

Recently Updated

  • 异步通知中事务的处理
  • 线程池优化
  • KubeShpere部署(4.1.2)
  • 微服务之Auth篇
  • 记一次前端优化(vue2)

Trending Tags

Java Docker 前端 中间件 数据库 群晖 unraid

Contents

©2025 十六小站. Some rights reserved.

Using the Halo theme Chirpy