需求背景
spring cloud搭建微服务系统,每个业务模块使用swagger开放文档接口查询,在业务网关模块提供swagger文档聚合查询接口,可以通过选择业务模块分类查看。
框架选型、版本及主要功能
- spring boot 2.1.6.RELEASE
- spring cloud Greenwich.SR3
- spring cloud gateway 2.1.3.RELEASE 网关组件
- knife4j 2.0.1 增强swagger ui样式,网关使用其starter依赖
- swagger bootstrap ui 1.9.6 增强swagger ui样式
- spring4all-swagger 1.9.0.RELEASE 配置化swagger参数,免去代码开发
模块职责划分
-
swagger组件
开发一个项目内的swagger-spring-boot-starter,整合swagger bootstrap ui 1.9.6和spring4all-swagger 1.9.0.RELEASE,对外提供@EnableSwagger注解服务 -
业务模块
引用自定义的swagger-spring-boot-starter,同时在配置文件中添加本模块的swagger基础信息配置。 -
网关模块
引用knife4j整合swagger,并开发filter、handler、config对多模块的swagger进行聚合
开发步骤示例
swagger组件
pom.xml文件依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
自定义注解
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EnableSwagger2Doc
@EnableSwaggerBootstrapUI
@Import(SwaggerCommandLineRunner.class)
public @interface EnableSwagger {
}
注意@EnableSwagger2Doc,@EnableSwaggerBootstrapUI注解,@EnableSwagger2Doc注解能将swagger配置文档化,避免业务模块再开发swagger的代码,@EnableSwaggerBootstrapUI就是改进了swagger ui界面。
指定swagger的默认访问端口
@Slf4j
@Component
public class SwaggerCommandLineRunner implements CommandLineRunner {
@Value("${server.port:8080}")
private String serverPort;
@Override
public void run(String... args) {
log.info("swagger url:http://localhost:" + serverPort + "/doc.html");
}
}
这样这个组件就集成完毕了,这个组件以多module的形式存在于项目公共组件中,使用maven引用即可。
业务模块开发
application中使用@EnableSwagger注解(自行开发的那个,不要搞错了)
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.hy.demo.**.mapper")