SpringDoc + Spring Gateway + Knife4j 集成

2023-10-26

前言

如果有必要使用Spring Doc时,好像官方的文档相对较少,为此重新尝试了一把,SpringDoc的基本使用请查看官网,这里关键说下Spring Gateway 的配置。

POM.xml

<dependencies>
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-webflux-ui</artifactId>
            <version>1.6.9</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-springdoc-ui</artifactId>
            <version>3.0.3</version>
        </dependency>
</dependencies>

application.xml

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

方式一:通过动态配置

@Configuration
public class SpringDocConfig {
    protected final SwaggerUiConfigProperties swaggerUiConfigProperties;
    protected final RouteDefinitionLocator routeDefinitionLocator;

    public SpringDocConfig(SwaggerUiConfigProperties swaggerUiConfigProperties, RouteDefinitionLocator routeDefinitionLocator) {
        this.swaggerUiConfigProperties = swaggerUiConfigProperties;
        this.routeDefinitionLocator = routeDefinitionLocator;
    }

    @PostConstruct
    public void autoInitSwaggerUrls() {
        List<RouteDefinition> definitions = routeDefinitionLocator.getRouteDefinitions().collectList().block();

        definitions.stream().forEach(routeDefinition -> {
            AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl(
                    routeDefinition.getId().replace("ReactiveCompositeDiscoveryClient_", "").toLowerCase(),
                    routeDefinition.getUri().toString().replace("lb://", "").toLowerCase() + "/v3/api-docs"
            );
            Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> urls = swaggerUiConfigProperties.getUrls();
            if (urls == null) {
                urls = new LinkedHashSet<>();
                swaggerUiConfigProperties.setUrls(urls);
            }
            urls.add(swaggerUrl);
        });
    }
}

原理是自动注入到gateway的服务,通过一定的规则 {name:service-id,url: service-id}的形式去自动添加到spring doc的url配置中。

方式二:通过配置文件指定

application.xml

springdoc:
  swagger-ui:
    urls:
      - name: user-service
        url: /user-service/v3/api-docs
      - name: role-service
        url: /role-service/v3/api-docs

这种方式可以根据所需明确指定swagger公开的服务及文档地址,但是不能主动发现和添加服务的Swagger接口

访问

通过 http://gateway-host/doc.html访问Knife4J的页面

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringDoc + Spring Gateway + Knife4j 集成 的相关文章

随机推荐

  • DEDE后台添加新变量出现:Request var not allow!的解决办法

    论坛上很多人都反馈说在后台添加新变量的时候会出现 Request var not allow 的BUG错误 本文主要就是介绍如何去解决这个问题 下面看具体操纵 在DEDE根目录打开 include common inc php 文件 查找到
  • pycharm 2019.2 安装包失败

    简介 最近使用学生账号注册了pycharm 貌似全家桶都可以免费用了 就升级了pycharm到最新版 但是在使用包管理 安装包的时候出错了 提示没有匹配的版本 下面还提示一个 trusted host pypi douban com 右下角
  • es搜索 核心指标_ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析

    es的六种搜索方式 query string search GET ecommerce product search 查询所有数据 took 4 耗费几毫秒 timed out false 是否超时 shards 数据拆分成5个分片 对所有
  • Qt编写软件注册功能

    一 软件目的 应项目需求 需要为编写的软件添加一层保护 防止滥用 二 软件环境 Qt5 9 Windows 主要加密算法 MD5 MD5简单介绍 MD5是一种不可逆的加密算法 类似计算hash值 不同的数据字符无论长短 经过MD5计算后都会
  • Pip快速离线安装pytorch-gpu

    Pip快速离线安装pytorch gpu 1小节讲解涉及的基本概念 读者也可直接从2小节开始 1 安装pythorch涉及的基本组件概念 1 1 显卡驱动Driver 常识概念 此处略过 1 2 CUDA CUDA Compute Unif
  • 二维邮局选址问题-带权中位数

    算法设计练习作业 邮局选址问题 将自己写的分享 有问题请指正 希望共同学习 关于邮局选址问题的理论知识就不赘述了 网上有讲解的 include
  • Python 入门基础

    第一个Python程序之打印 Hello World print Hello World 字符串定义的三种方式 type 用了检测数据类型 单引号定义法 使用单引号进行包围 name 测试 print type name 双引号定义法 na
  • Mysql审核查询平台Archery部署

    目录 1 Archery产品介绍 2 基于docker搭建Archery 2 1 系统环境 2 2 安装 Docker 2 2 1 安装 Docker Compose 2 2 2 下载Archery 2 2 3 安装并启动 2 2 4 表结
  • jdk8

    文章目录 1 场景再现 2 Supplier
  • 【计蒜客】2n皇后问题

    思路 此题与n皇后问题十分类似 也是利用递归回溯求解 这题放2n个皇后 我采取的做法是 先放n个黑皇后 再放n个白皇后 具体实现见代码 一些细节方面我都标注出来了 并且做了详细解释 代码 include
  • [Python] Python中的模块、包和内置函数

    1 模块 python 模块简单来说就是一个 py文件 程序的目的是运行 而模块的目的是供其他程序导入并且使用 模块也有对象 每个模块对象都有一个特殊属性 dict 这是一个包含模块符号表的字典 导入模块 import importable
  • springboot 配置双mysql数据库

    项目中用到 学习了一下 记录下来 先回用 再搞懂原理 架构 springboot mybatis mysql连接池 springboot默认的HikariCP 配置点 1 就目录里的DataSourceConfigBackup和DataSo
  • seaborn可视化01,涵盖几乎所有用法

    seaborn可视化 一 Matplotlib试着让简单的事情更加简单 困难的事情变得可能 而Seaborn就是让困难的东西更加简单 seaborn是针对统计绘图的 一般来说 seaborn能满足数据分析90 的绘图需求 Seaborn其实
  • 应用程序图标丢失快捷方式没有图标怎么办

    应用程序图标丢失快捷方式没有图标怎么办 有的时候由于各种不小心 把应用程序的快捷方式删除或者是拉到了另一个盘符等各种原因 在将其恢复发现没有应用程序的图标了 找到应用程序的安装目录 添加其快捷方式仍然没有图标 发现很难看 特别是有强迫症的人
  • 机器学习------结构因果机制(SCM)、因果关系、因果推断

    因果 1 什么是因果 为什么研究因果 1 1 什么是 1 2 为什么研究 1 3 机器学习中用到的因果推论 1 4 因果性和相关性的区别 Two main questions Two main frameworks 2 因果研究发展 2 1
  • 英飞凌 AURIX TC3XX 系列单片机的 CAN 外设介绍(一)

    1 前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 MCMCAN 外设介绍 MCMCAN 遵循 ISO 11898 1 和 ISO 11898 4 做数据收发 能提供 ISO 11898 4 中规定的时间触发通信的所有功
  • 最适合程序员转行的10大职业

    三十而立 源自 论语 为政 说的是人到了30岁就应该去面对生活中的一切困难 而对于软件开发领域的从业者来说 30岁 却是一道槛 30岁以后 适合程序员的工作到底是什么 专家和大家一起分解 No 1 程序员 适合程序员30岁以后的工作 排名第
  • 【CSS3】transition与animation的区别

    animation 可以用 name 设置动画的名称 用 duration 设置动画完成的周期 用 timing function 设置动画的速度曲线 delay 设置动画什么时候开始 iteration count 设置动画播放的次数 d
  • 使用Python做副业,我需要具备什么技能水平?

    B站主页 https space bilibili com 1707990930 欢迎 点赞 收藏 评论 如有错误请指正 Python Java领域博主 你们的支持是我最大的动力 文章目录 使用Python做副业 我需要具备什么技术水平 爬
  • SpringDoc + Spring Gateway + Knife4j 集成

    前言 如果有必要使用Spring Doc时 好像官方的文档相对较少 为此重新尝试了一把 SpringDoc的基本使用请查看官网 这里关键说下Spring Gateway 的配置 POM xml