当前位置: 首页 > news >正文

Java 生产环境 Swagger 实战

目录

一、选型说明(生产必看)

1. 主流版本区别

二、方案一:Springdoc-OpenAPI(Spring Boot 2.x/3.x 通用,生产主推)

1. 依赖引入(Maven)

Spring Boot 2.x

Spring Boot 3.x(必须用新版)

2. 全局配置类(生产标准配置)

3. 多接口分组(微服务 / 多模块必备)

4. 常用注解(OpenAPI3 注解,替换旧 Swagger)

5. 访问地址

三、方案二:Knife4j(界面增强,传统项目过渡)

1. 依赖(OpenAPI3 版本)

2. 生产核心配置(application.yml)

3. 访问地址

四、生产环境核心管控(重中之重,上线必须配置)

1. 环境隔离:生产环境彻底关闭 Swagger/OpenAPI

方式 1:使用 @Profile(推荐,代码层面控制)

方式 2:配置文件开关(运维可动态控制)

方式 3:Nginx / 网关拦截(网关层兜底)

2. 安全加固(防止接口文档泄露、爬虫、越权)

3. 性能优化(高并发生产环境)

4. 微服务网关适配(Spring Cloud Gateway)

五、生产常见坑 & 解决方案

1. 坑 1:Spring Boot 2.6+ 循环依赖(老 SpringFox)

2. 坑 2:生产忘记关闭文档,接口对外泄露

3. 坑 3:文档参数和实际接口不一致

4. 坑 4:线上 CPU / 内存升高

5. 坑 5:HTTPS 环境下文档请求异常

六、生产环境上线规范(团队标准)

七、生产替代方案(进阶)


本文基于Spring Boot/Spring Cloud主流技术栈,覆盖 Swagger 选型、集成、生产环境安全、权限、性能、灰度、下线、替代方案,全部为生产落地标准方案。

一、选型说明(生产必看)

1. 主流版本区别

  1. SpringFox(传统 Swagger)
    • 依赖:springfox-swagger2 + springfox-swagger-ui
    • 问题:停止维护、Spring Boot 2.6+ 循环依赖报错、Spring Boot 3.x 完全不兼容、漏洞多,新项目禁止使用
  2. Knife4j(国内增强版,基于 SpringFox/OpenAPI3)
    • 界面友好、离线文档、全局参数、文档加密、导出 MD/HTML,中小企业生产首选
  3. Springdoc-OpenAPI(OpenAPI 3 官方实现,推荐)
    • 兼容 Spring Boot 2.x/ 3.x、Spring Cloud 全版本、原生 OpenAPI3 规范、无兼容坑,大厂微服务标准方案

生产环境推荐优先级:Springdoc-OpenAPI(首选) > Knife4j OpenAPI3 > 传统 SpringFox(淘汰)


二、方案一:Springdoc-OpenAPI(Spring Boot 2.x/3.x 通用,生产主推)

1. 依赖引入(Maven)

Spring Boot 2.x
<!-- OpenAPI3 核心 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.7.0</version> </dependency> <!-- 增强注解、分组、枚举解析(可选) --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-common</artifactId> <version>1.7.0</version> </dependency>
Spring Boot 3.x(必须用新版)
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.5.0</version> </dependency>

2. 全局配置类(生产标准配置)

实现:文档信息、接口分组、全局请求头 (Token)、忽略静态资源、生产开关

import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; /** * OpenAPI3 文档配置 * Profile: dev/test 环境生效,prod 环境自动关闭 */ @Configuration // 仅开发、测试环境开启,生产环境禁用文档入口 @Profile({"dev", "test"}) public class OpenApiConfig { @Value("${spring.application.name}") private String appName; @Bean public OpenAPI customOpenAPI() { // 定义全局 Token 认证(前后端分离项目必备) String authName = "Authorization"; return new OpenAPI() // 全局添加认证请求头 .addSecurityItem(new SecurityRequirement().addList(authName)) .components(new Components() .addSecuritySchemes(authName, new SecurityScheme() .name(authName) .type(SecurityScheme.Type.HTTP) .scheme("bearer") .bearerFormat("JWT"))) // 文档基础信息 .info(new Info() .title(appName + " 接口文档") .version("1.0.0") .description("生产环境接口文档,仅限内部人员查阅") .contact(new Contact() .name("开发团队") .email("dev@xxx.com")) .license(new License().name("Apache 2.0"))); } }

3. 多接口分组(微服务 / 多模块必备)

按模块 / 角色拆分文档,避免接口杂乱:

import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration @Profile({"dev", "test"}) public class ApiGroupConfig { // 分组1:用户模块 @Bean public GroupedOpenApi userApi() { return GroupedOpenApi.builder() .group("用
http://www.jsqmd.com/news/941442/

相关文章:

  • F#函数式编程入门:从核心范式到数据处理实战
  • 2026武汉黄金回收现状解析:你的闲置黄金,或许正是最佳变现时机 - 奢侈品回收测评
  • 2026丽江装修第三方实测:5家装企横评,为什么越来越多民宿老板选择之间装饰? - 博客万
  • 上海优质系统窗企业排行:实测性能与口碑双维度 - 奔跑123
  • 3步搞定Switch手柄PC连接:BetterJoy终极适配指南
  • 青年研究者如何规划早期科研生涯:从Borg奖看交叉领域创新与影响力构建
  • 2026年6月湖北口碑不错的防水资质办理代理如何选择?五大专业服务商深度对比 - 2026年企业资讯
  • 2026扬州新中式加静奢风,这4个品牌做出了东方极简新高度 - 高定
  • 关路由器要等 30 秒才能再开的原因(标准断电等待 30s 原理)
  • 别再死记硬背了!用蜂鸣器电路实例,手把手教你NPN/PNP三极管的电流流向与选型
  • 2026发膜选购指南:一文看懂各品牌怎么选 - 资讯纵览
  • 基于AI大模型的结构解析自动生成Mock测试数据策略
  • 告别踩坑!在RHEL 8上源码编译PostgreSQL 16的保姆级全流程(附依赖包清单)
  • 虚拟探索未来计算:沉浸式技术沙龙的设计与实现
  • 手把手教你:在Krita里用ComfyUI插件实现实时AI绘画(附LCM加速配置)
  • 猫骨髓间充质干细胞(BMMSCs)原代细胞 分离和成脂肪分化方案 云克隆厂家protocol
  • 郑州本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修 - 欧米到家
  • Linux下四路AHD摄像头通过MAX9286+96705转MIPI CSI-2的驱动实现
  • 长春黄金回收市场波动加剧 市民如何避开隐性陷阱安全变现 - 专业黄金回收
  • Steam成就管理器技术架构深度解析:如何安全高效管理游戏成就数据
  • 告别数据标注烦恼:用自监督学习搞定你的时序预测、分类与异常检测
  • AI配音“假声感”终结者:基于372小时真实用户听感测试的8项声学特征调优清单
  • 旧物新生:用斐讯N1盒子+CasaOS+Docker,打造你的家庭影音库和下载中心(附详细避坑指南)
  • 2026年6月深挖三大典型劳资判例:兰军伟律师劳动纠纷实战盘点,详解超龄工亡、混同用工、寒暑假薪资法律要点 - 十大排行榜推荐
  • 专升本教育理论资料|2026教育学教育心理学真题PDF电子版
  • 贵阳黄金回收新趋势:足不出户轻松变现,上门服务成市民首选 - 专业黄金回收
  • 2026 贵金属回收行情,长沙五家持证实体门店盘点 - 奢侈品回收测评
  • IEEE技术成就奖深度解析:从智能超表面到6G通信的技术创新路径
  • 2026年天津钢结构加工厂家实力排行 技术与产能双维度解析 - 奔跑123
  • 超强AI写专著工具:一键生成20万字专著,写作从此不发愁!