当前位置: 首页 > 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.rkmt.cn/news/1452875.html

相关文章:

  • 青年研究者如何规划早期科研生涯:从Borg奖看交叉领域创新与影响力构建
  • 别再死记硬背了!用蜂鸣器电路实例,手把手教你NPN/PNP三极管的电流流向与选型
  • 告别踩坑!在RHEL 8上源码编译PostgreSQL 16的保姆级全流程(附依赖包清单)
  • 猫骨髓间充质干细胞(BMMSCs)原代细胞 分离和成脂肪分化方案 云克隆厂家protocol
  • 郑州本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修 - 欧米到家
  • Linux下四路AHD摄像头通过MAX9286+96705转MIPI CSI-2的驱动实现
  • Steam成就管理器技术架构深度解析:如何安全高效管理游戏成就数据
  • 告别数据标注烦恼:用自监督学习搞定你的时序预测、分类与异常检测
  • AI配音“假声感”终结者:基于372小时真实用户听感测试的8项声学特征调优清单
  • 光猫改桥接后,手把手教你用OpenWRT软路由拨号上网(保姆级图文)
  • 告别第三方App!手把手教你用xdisp_virt在Windows上搭建AirPlay接收端(支持iOS/iPad投屏)
  • 曲靖SEO优化公司|企业网站排名提升,曲靖搜索引擎优化服务商选择指南 - 招财兔数字员工
  • 别再只会抄参考电路了!深度拆解MP1584EN数据手册,搞懂DCDC每个外围元件的“为什么”
  • 【AI工具付费决策指南】:20年IT老兵亲测17款主流AI工具,付费版ROI究竟值不值?
  • 避坑指南:STM32连接广和通L610模块上腾讯云,我踩过的那些驱动和AT指令的坑
  • Vitis HLS 2023.2实战:手把手教你用官方Vision库实现图像霍夫变换(从库下载到C仿真成功)
  • Sora 2驱动的敦煌莫高窟动态复原:如何用172小时训练数据重建已消失的北魏彩绘层?
  • Garnet:下一代高性能缓存系统架构解析与性能对比
  • 手把手教你用Vivado配置UltraScale+的40G/50G以太网IP核(附完整工程代码)
  • XUnity.AutoTranslator终极指南:3步让外文游戏瞬间变中文,新手也能轻松上手!
  • 单片机里的Cache到底怎么工作的?用Arduino和ESP32做个实验给你看明白
  • REST API模糊测试实战:用RESTler自动化发现云服务深层缺陷
  • STM32 RS485通信避坑指南:从硬件连接到HAL库代码,手把手教你搞定MODBUS
  • 【落地电脑自动化】,OpenClaw v2.7.8 安装使用详解(含安装包)
  • MySQL 基础
  • 别再只会画流程图了!用Visio搞定电路图与波形图的保姆级教程
  • 6款好用降AIGC网站 合规程度拉满 - 降AI小能手
  • 别再只盯着Wi-Fi了!手把手教你读懂家庭弱电箱,从PON、FTTR到Mesh组网全解析
  • 除了超级马里奥,你还可以用Docker一键部署这些经典网页游戏(红白机模拟器合集)
  • 3分钟让Windows右键菜单快如闪电:ContextMenuManager新手必读指南