最终成果
SpringCloud基础配置
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties>
SpringCloud 子服务集成knife4j
在knife4j 4.0版本之前,应用坐标
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>{<4.0.0版本}</version>
</dependency>
自4.0版本开始,maven组件的artifactId
已经发生了变化(我这里使用了4.4.0),实际配置如下。
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
SwaggerConfig配置类文档,使用@EnableSwagger2WebMvc注解
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
/**
* 配置基本信息
*
* @return
*/
@Bean
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("xx开发文档【接口Api】") //文档的标题,可自定义
.description("开发文档") //测试的接口文档,可自定义
.termsOfServiceUrl("http://localhost:0000/")
// .contact("1111@qq.com") //联系人信息,可自定义
.version("1.0") //版本信息,可自定义
.build();
}
/**
* 配置文档生成最佳实践
*
* @param apiInfo
* @return
*/
@Bean
public Docket createRestApi(ApiInfo apiInfo) {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.order.controllertest"))
.paths(PathSelectors.any())
.build().groupName("order");
}
}
到这里子服务就已经实现完成!
SpringCloud gateway网关集成knife4j
引入maven文件,knife4j虽然给了最低版本说明,但实际对所有springCloud都有效,配置如下:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
application.yml完成配置如下,需要根据自己的子服务做路径的配置:
#knife4j的网关聚合配置 文档地址:http://{gateway.host}:{gateway.port}/doc.html
knife4j:
# # 聚合swagger文档
gateway:
enabled: true
# 排序规则(tag/operation排序自4.2.0版本新增)
# 取值:alpha-默认排序规则,官方swagger-ui默认实现,order-Knife4j提供的增强排序规则,开发者可扩展x-order,根据数值来自定义排序
tags-sorter: order
operations-sorter: order
# 指定手动配置的模式(默认为该模式)
strategy: manual
routes:
- name: 第三方的接口
# 真实子服务访问url地址-提供OpenAPI的文档
url: /gateway/order/v2/api-docs?group=order
# url: /v3/api-docs
service-name: ac-search
# 路由前缀
# 兼容OpenAPI3规范在聚合时丢失contextPath属性的异常情况,由开发者自己配置contextPath,Knife4j的前端Ui做兼容处理,与url属性独立不冲突,仅OpenAPI3规范聚合需要,OpenAPI2规范不需要设置此属性,默认为(apiPathPrefix)
context-path: /
order: 2
- name: 订单接口
#我这里网关的前缀是gateway,订单的前缀是order,路由转发时过滤掉了gateway。事实上我们也可以通过路由转发到其它单个服务上面去,从而达到聚合其它服务的说明文档,比如下面的云服务接口
url: /gateway/order/v2/api-docs?group=order
service-name: ac-order=
# 路由前缀
context-path: /
order: 3
- name: 云服务接口
# url: /ac-search/v2/api-docs?group=default
url: /gateway/zybYun/v2/api-docs?group=zybYun
service-name: ac-order=
# 路由前缀
context-path: /
order: 4
结语
到此,springCloud微服务集成knife4j4.4.0已经完成。希望这篇文章对您有所帮助!