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: 用户模块
相关推荐
DN金猿6 小时前
使用ubuntu安装nginx时报错
linux·nginx·ubuntu
怒放de生命201014 小时前
前端子包+docker流水线部署+nginx代理部署
前端·nginx·docker
weixin_4624462316 小时前
Ubuntu 使用 systemd + Nginx 部署 code-server(含 HTTPS)
nginx·ubuntu·https
连续讨伐2 天前
前期小随笔
服务器·网络·nginx
s_daqing2 天前
ubuntu(arm)使用nginx安装静态服务器
服务器·nginx·ubuntu
物有本木2 天前
httpsok-v2.0.8发布-支持IIS证书自动续签
nginx·ssl
Volunteer Technology3 天前
Nginx部署静态项目
运维·服务器·nginx
摇滚侠3 天前
尚硅谷 Nginx 教程(亿级流量 Nginx 架构设计),基本使用,笔记 6-42
java·笔记·nginx
衫水3 天前
Ubuntu 系统部署 Vue/Vite 应用到 Nginx
vue.js·nginx·ubuntu