在 Linux 环境下“优化 Swagger”通常可以从性能、资源占用、安全性、文档质量和部署方式几个角度来做。下面我按常见场景给你一套实用优化方案。
最关键的优化其实是“少跑一点”。
示例(Spring Boot)
spring:
profiles: dev
swagger:
enabled: true
---
spring:
profiles: prod
swagger:
enabled: false
如果你用的是 Swagger UI:
swagger-ui-dist 静态文件location /swagger-ui/ {
alias /opt/swagger/swagger-ui/;
expires 7d;
}
避免扫描整个 classpath。
❌ 不推荐
@EnableSwagger2
public class SwaggerConfig {}
✅ 推荐
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.api"))
.paths(PathSelectors.ant("/api/**"))
.build();
}
Swagger 扫描会消耗内存,尤其在容器里。
java -Xms256m -Xmx512m -jar app.jar
Docker 示例:
ENV JAVA_OPTS="-Xms256m -Xmx512m"
不要让每次启动都重新解析注解。
springdoc-openapiopenapi.jsoncurl http://localhost:8080/v3/api-docs > openapi.json
然后用静态 Swagger UI 加载:
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
url: "/openapi.json",
dom_id: "#swagger-ui"
});
};
</script>
Nginx 限制
location /swagger/ {
allow 10.0.0.0/8;
deny all;
}
或 Basic Auth
auth_basic "Swagger";
auth_basic_user_file /etc/nginx/swagger.htpasswd;
@ApiIgnorepaths() 精确控制.paths(PathSelectors.regex("^(?!.*/internal/).*$"))
更轻、更标准、工具链更好。
springdoc-openapiexpress-openapi避免一个页面加载上千接口。
@Bean
public GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("public")
.pathsToMatch("/api/**")
.build();
}
推荐架构:
[App] --> 生成 openapi.json
|
[Nginx] --> 托管 swagger-ui + openapi.json
优点:
# CPU 高
top -Hp <pid>
# 内存占用
jmap -histo <pid> | head
# 接口响应慢
curl -w "%{time_total}\n" http://localhost:8080/v3/api-docs
你可以告诉我:
我可以直接给你针对性配置或代码。