You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个Spring Boot应用的SwaggerUI合并为统一界面?

解决方案

一、可以实现单个SwaggerUI聚合所有应用的OpenAPI定义

完全可以像对接Prometheus那样,通过内部网络动态拉取各应用的OpenAPI文档,聚合到单个SwaggerUI中,无需对外暴露各应用的管理端口。

具体实现步骤

利用你已有的那个带SwaggerUI的Spring Boot应用,添加以下配置(基于springdoc-openapi 2.8.5版本),让它从内部网络访问其他应用管理端口上的OpenAPI定义:

  1. 确保所有应用都已添加springdoc依赖(和现有应用一致):
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.8.5</version>
</dependency>
  1. 在已有SwaggerUI的应用的application.properties或application.yml中添加聚合配置:
# 配置多个应用的OpenAPI文档地址(内部网络可访问的地址)
springdoc.swagger-ui.urls[0].name=现有应用
springdoc.swagger-ui.urls[0].url=/v3/api-docs
springdoc.swagger-ui.urls[1].name=应用2
springdoc.swagger-ui.urls[1].url=http://app2-internal:管理端口/v3/api-docs
springdoc.swagger-ui.urls[2].name=应用3
springdoc.swagger-ui.urls[2].url=http://app3-internal:管理端口/v3/api-docs
# 依次配置剩余3个应用

这样用户访问该应用的SwaggerUI时,就能通过页面顶部的下拉菜单切换查看所有6个应用的API文档,全程只用一个URL,且各应用的管理端口无需对外暴露(内部网络访问即可,和Prometheus对接Actuator的逻辑一致)。

二、替代方案:静态文件导入独立SwaggerUI容器

如果不想通过动态聚合的方式,也可以用springdoc-openapi-maven-plugin生成静态openapi.json文件,再导入独立的SwaggerUI Docker容器:

  1. 给每个应用添加maven插件配置:
<plugin>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-maven-plugin</artifactId>
    <version>2.8.0</version> <!-- 对应springdoc版本选择兼容版本 -->
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <apiDocsUrl>http://localhost:管理端口/v3/api-docs</apiDocsUrl>
        <outputFileName>openapi-appX.json</outputFileName>
        <outputDir>${project.build.directory}</outputDir>
    </configuration>
</plugin>
  1. 生成所有应用的openapi-appX.json文件后,部署SwaggerUI Docker容器,将这些文件挂载到容器的指定目录(比如/usr/share/nginx/html/docs),然后修改SwaggerUI的配置文件(swagger-initializer.js),添加多个文档的入口:
window.onload = function() {
  window.ui = SwaggerUIBundle({
    urls: [
      { name: "应用1", url: "/docs/openapi-app1.json" },
      { name: "应用2", url: "/docs/openapi-app2.json" }
      // 其他应用配置
    ],
    dom_id: '#swagger-ui',
    // 其他默认配置
  });
};

不过这种方式需要手动维护静态文件,API变更后需重新生成并更新容器,灵活性不如动态聚合。

内容的提问来源于stack exchange,提问作者DJViking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:17:11