当前位置: 首页 > news >正文

spring boot 3.3.4 网关(gateway) 集成knife4j 4.4.0

spring boot版本 3.3.4,jdk 22, springcloud 2023.0.3

官方参考链接 

Spring Cloud Gateway网关聚合 | Knife4j (xiaominfo.com)

springboot版本信息
<properties> <java.version>22</java.version> <spring-cloud.version>2023.0.3</spring-cloud.version> 
</properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/>
</parent>

一、网关集成 knife4j 4.4.0

<dependency>  这是网关的maven坐标,它不用spring boot自带的tomcat<groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency>

网关的核心配置

server:
  port: 9101
  servlet:
    context-path: /
spring:
  main:
    web-application-type: reactive #不使用tomcat的配置,与gateway无关
  application:
    name: GatewayApp
  cloud:
    gateway:
      #保证通过网关能访问子服务的配置 这个与gateway无关,主要是fegin调用使用
      routes:
        - id: ServiceApp9100 #你的子服务
          uri: http://localhost:9100
          predicates:
          - Path=/service/**   # service子服务的context-path值
        - id: PortalApp9099  #你的子服务
          uri: http://localhost:9099
          predicates:
          - Path=/protal/**
  
eureka: # 配置确认通过网关可以从eureka调用到子服务
  instance:
    lease-expiration-duration-in-seconds: 30
    lease-renewal-interval-in-seconds: 10
    hostname: localhost     #服务主机名称
    prefer-ip-address: true #是否优先使用ip来作为主机名
  client:
    register-with-eureka: true #注册到Eureka的注册中心
    fetch-registry: true #获取注册实例列表
    enabled: true # 启用eureka客户端
    registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
    healthcheck:
      enabled: true
    service-url:
      defaultZone: http://localhost:9098/eureka/ #eureka服务的地址
 
knife4j:          #这里是重点
  gateway:
    # 开起网关聚合文档
    enabled: true
    # 网关前缀(如nginx配置的代理前缀) 默认:/
    api-path-prefix: /
    # 使用的UI版本(v2或者v3) 默认: v3
    version: v3
    # 指定服务发现的模式聚合微服务文档,并且是默认 default 分组
    strategy: discover
    # 服务发现
    discover:
      # OpenAPI 3.0 规范
      version: openapi3
      # 开启服务发现 默认:true
      enabled: true
      # 默认排序 默认:0
      default-order: 0
      # 排除的服务名 默认:为空(建议排除网关服务)
      excluded-services: ${spring.application.name}
    routes:
      # 子服务分组名称
      #子服务的服务名跟你的子服务名字一样就行 一般用servlet.context-path的值
      - name: service
        #这里很重要 必须有【service】,否则访问的是ip:port/v3/apidocs,报404
        #官网在这里根本没有解释,估计官网写文档的认为开发都是高手,没有多余的交代
        #service漏写很痛苦,各种尝试,各种jar包替换,没有过多的交代,导致开发者填坑
        url: 'service/v3/api-docs'
        # context-path
        context-path: '/service'
        # 服务名
        service-name: service
        # 排序
        order: 1   

上面的配置完,就能启动网关服务访问,前提是子服务也得集成结束,要不然会报错

http://127.0.0.1:9101/doc.html  网关服务的访问地址/doc.html

高版本就是引入maven坐标,添加配置,启动项目就行,不用做任何配置类操作。

二、子服务集成

前提是子服务已经和eureka作好集成,通过网关能访问到子服务的api

maven坐标

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>

配置文件中的配置,可能有些多余的,目前没有排除

server:port: 9100servlet:context-path: /service
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'service'paths-to-match: '/**'packages-to-scan: 'com.xxx.xxxx' #你的包路径,比如com.xxx.xxx.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:enable: truesetting:language: zh-CN

启动子服务就行,确保子服务自己的knife4j能访问到

至此集成完成。不需要任何配置类编写,就是引入maven坐标,整理好配置文件,启动类头上不需要任何关于knife4j的注解。

注意:如果eureka有Security管理,记得放开下面路径,没有引入Security应该不用管

/*** 配置要忽略的路径  这个在eureka项目的启动类中加就行*/
@Bean
WebSecurityCustomizer webSecurityCustomizer() {// 忽略 /error /eureka/**return web -> web.ignoring().requestMatchers("/error","/eureka/**","/swagger-ui.html","/webjars/**","/swagger-resources/**","/v2/*","/doc.html","/service/v3/api-docs","/v3/api-docs/swagger-config");
}

http://www.mrgr.cn/news/51301.html

相关文章:

  • FreeRTOS:消息队列
  • PyTorch搭建GNN(GCN、GraphSAGE和GAT)实现多节点、单节点内多变量输入多变量输出时空预测
  • C++面向对象之多态
  • UI自动化测试 —— web端元素获取元素等待实践!
  • 数据库管理工程师证书,是“敲门砖”还是“鸡肋”?
  • 如何开启华为交换机 http
  • windows中 GDTR和GDT关于快速调用的实现1
  • 生信软件38 - 基因型填充软件IMPUTE2
  • 重磅优惠,节省高达56%
  • Spring专题
  • misc-stuff: jump into thinking
  • 【Python机器学习】入门机器学习算法,打造智能应用!
  • 河源市社保卡照片要求及手机自拍拿数码相片回执的方法
  • 代码随想录算法训练营第三十五天|452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间
  • ESP-01S WIFI模块指南
  • 代码提交后服务器项目同步更新
  • 解锁传音控股的“500强”实力:创新力是站稳市场的关键
  • 一文了解数字孪生是什么?数字孪生赋能哪些行业应用场景
  • CloudDM Team - 全新的企业级数据库数据安全管控平台
  • Windows Tomcat 图文详细教程(包括环境配置)