springboot3整合knife4j,并nginx映射到外网

项目想使用jdk21的虚拟线程,所以适配的springboot版本,也升级到3.4.0

1、pom.xml修改

复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>6.2.11</version>
</dependency>

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency> 
...
</dependencies>

pom.xml里只要像上面写了后,重启应用,就能直接访问 http://localhost:90/doc.html了。不用在application-dev.yml里定义什么,也不用 在/config下 写什么自动被扫描的Bean。。。

如果要:加个访问密码,定义下api的作者,版本,联系人的什么的,还是要写一个Bean的。

2、如果要把它映射到通过nginx控制的外网

2.1、 强制给它加一个context path(如果nginx下有很多应用,为了区别开)

这个主要是有的时候想给这个knife4j的默认根目录前加个前缀,怎么弄都不成功,不知道为何,所以另寻思路。如果不更改根目录,通过nginx做代理又很麻烦、指令会很复杂。

研究发现,在springboot3的 application-dev.yml 里写server.servlet.context-path不起作用(不识别这个配置项)。但是在启动脚本里,这样写:java -jar myapp.jar --server.servlet.context-path=/myapp 还是起作用的。

2.2、 nginx写转发

location /myapp/doc.html {

proxy_pass http://10.102.142.24:90/myapp/doc.html ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/webjars/ {

proxy_pass http://10.102.142.24:90/myapp/webjars/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/v3/ {

proxy_pass http://10.102.142.24:90/myapp/v3/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

location /myapp/ {

proxy_pass http://10.102.142.24:90/myapp/ ;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host;

}

3、定义api的作者,版本。。。

复制代码
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 org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j整合Swagger3 Api接口文档配置类
 * @author wangzheng
 */
@Configuration
public class Knife4jConfig {
    /**
     * 创建了一个api接口的分组
     * 除了配置文件方式创建分组,也可以通过注册bean创建分组
     */
    @Bean
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                // 分组名称
                .group("default")
                // 接口请求路径规则
                .pathsToMatch("/**")
                .build();
    }

    /**
     * 配置基本信息
     */
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info()
                        // 标题
                        .title("MyApp API")
                        // 描述Api接口文档的基本信息
                        .description("MyApp API")
                        // 版本
                        .version("v1.0")
                        // 设置OpenAPI文档的联系信息,姓名,邮箱。
                        .contact(new Contact().name("WangZheng").email("wang@qq.com"))
                        // 设置OpenAPI文档的许可证信息,包括许可证名称为"Apache 2.0",许可证URL为"http://springdoc.org"。
                        .license(new License().name("Apache 2.0").url("http://springdoc.org"))
                );
    }
}

4、其它的额外配置,还是要写到application-dev.yml

复制代码
# 以下不能打开,否则报错 重复的swagger对象。这里仅仅做参考
#springdoc:
# swagger-ui:
#    path: /swagger-ui.html
#    tags-sorter: alpha
#    operations-sorter: alpha
# api-docs:
#    path: /v3/api-docs
#    enabled: true   #是否开启文档功能
#  group-configs:
#    - group: 'default'
#      paths-to-match: '/**'
#      packages-to-scan: com.myapp.controller

# knife4j
knife4j:
  enable: true
  production: false # 这个恒久是flase,不能改成true。即使在appliction-prd.yml也是false。有歧义的一个配置项
  #是否启用登录认证
  basic:
    enable: true
    username: admin
    password: 123456
  setting:
    language: zh_cn
    enable-version: true
    enable-swagger-models: true
    swagger-model-name: 用户模块
相关推荐
消失的旧时光-194336 分钟前
Nginx 是什么?为什么它不写在代码里?——从 0 认识 Nginx
运维·服务器·nginx
不像程序员的程序媛10 小时前
Nginx日志切分
服务器·前端·nginx
JoySSLLian16 小时前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
一分半心动18 小时前
宝塔面板lnmp架构,tp6框架网站伪静态
nginx·php
全栈工程师修炼指南1 天前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
脏脏a1 天前
告别物理出勤:Nginx 搭配 cpolar 实现远程开发无缝协作
运维·nginx
Dxy12393102161 天前
413 Request Entity Too Large 原因与解决方案
nginx
CYpdpjRnUE1 天前
光储一体机仿真模型搭建之旅
nginx
Volunteer Technology2 天前
FastDFS+Nginx
运维·nginx
qinyia2 天前
**使用AI助手在智慧运维中快速定位并修复服务异常:以Nginx配置错误导致502错误为例**
linux·运维·服务器·数据库·mysql·nginx·自动化