SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx

上传人:A*** 文档编号:141375804 上传时间:2020-08-07 格式:DOCX 页数:7 大小:350.67KB
返回 下载 相关 举报
SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx_第1页
第1页 / 共7页
SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx_第2页
第2页 / 共7页
SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx_第3页
第3页 / 共7页
SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx_第4页
第4页 / 共7页
SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx》由会员分享,可在线阅读,更多相关《SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置.docx(7页珍藏版)》请在金锄头文库上搜索。

1、SpringCloud Alibaba微服务番外一 - Swagger自定义自动配置概述我们的所有微服务若想集成Swagger在线接口文档,都需要在各自模块中建立一个Swagger的配置类,关键代码如下:ConfigurationEnableSwagger2public class SwaggerConfig private static final String VERSION = 1.0.0; /* * 创建API */ Bean public Docket createRestApi() return new Docket(DocumentationType.SWAGGER_2) .en

2、able(true) .apiInfo(apiInfo() .select() .apis(RequestHandlerSelectors.withClassAnnotation(Api.class) .paths(PathSelectors.any() .build(); /* * 添加摘要信息 */ private ApiInfo apiInfo() return new ApiInfoBuilder() .title(product-server接口文档) .contact(new Contact(JAVA日知录,http:/,) .description(product-server接

3、口文档) .version(VERSION) .build(); 这样每个模块中都有一个SwaggerConfig配置类,他们的逻辑基本都一样,只是一些摘要信息不一样。这明显也算是违反了 DRY(Dont Repeat Yourself) 原则,这次我们来优化优化它,通过修改配置文件让Swagger自动配置。不过在编写代码之前我们还是需要先了解一下SpringBoot的自动配置原理。SpringBoot自动配置原理SpringBoot项目启动类上都会添加SpringBootApplication 注解,这个注解是个组合注解,他的核心功能是开启自动配置注解EnableAutoConfigurat

4、ion,如下图所示:Target(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)DocumentedInheritedAutoConfigurationPackageImport(AutoConfigurationImportSelector.class)public interface EnableAutoConfiguration 。EnableAutoConfiguration 又通过Import 注解导入了AutoConfigurationImportSelector。通过对AutoConfigurationImportSelec

5、tor 中 selectImports 方法的跟踪,我们找到SpringBoot启动时会通过SpringFactoriesLoader.loadFactoryNames 方法 从 META-INF/spring.factories 这个文件下去寻找有没有自动配置类。protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) List configurations = SpringFactoriesLoader.loadFactoryNames(th

6、is.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader(); Assert.notEmpty(configurations, No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.); return configurations;spring.factories在项目中打开spring-boot-autoc

7、onfigure-2.1.9.RELEASE.jar,然后在META-INF文件夹下打开spring.factories,截取部分内容如下:# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,org.springframework.boot.autoconfigure.aop.AopAutoConfiguration

8、,org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个文件是一组的key=value的形式,通过value找到了自定义配置类,这里选取一个我们比较常见的配置类org.springframework.boot.autoconfi

9、gure.jdbc.DataSourceAutoConfiguration,打开源码:ConfigurationConditionalOnClass(DataSource.class, EmbeddedDatabaseType.class)EnableConfigurationProperties(DataSourceProperties.class)Import(DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class)public class DataSou

10、rceAutoConfiguration .这里我们又发现配置类上使用了EnableConfigurationProperties(DataSourceProperties.class),这个注解是去加载配置类。application.properties再打开DataSourceProperties.class,代码如下:ConfigurationProperties( prefix = spring.datasource)public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean p

11、rivate ClassLoader classLoader; private String name; private boolean generateUniqueName; private Class type; private String driverClassName; private String url; private String username; private String password; .看到这里大家都应该很熟悉了,主要是通过注解 ConfigurationProperties 从配置文件中加载spring.datasource开头的配置,如我们经常用的数据库配

12、置spring: datasource: type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql:/xxxxxxx/cloud_alibaba?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false username: xxx password: xxxxxx driver-class-name: com.mysql.jdbc.Driver从配置文件获取相关配置注入到DataSourceProperties这个类中总结通过观察源码我们找到了Spring

13、Boot自定义配置类的加载过程,主要是从META-INF/spring.factories 找到对应的启动类,启动类上再通过配置类加载配置文件。说起来很简单,但是实现起来还是很复杂的。接下来我们就根据我们的理解来完成Swagger的自动配置。自定义Swagger自动配置这里可能有人会问,虽然看完了自定义配置的加载逻辑,但是还是不会写怎么办?不会写没关系啊,咱们不是会复制粘贴吗?我们以org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration为例,开始我们的自定义配置(Copy,Paste)过程建立配置文件我们在

14、common模块建立resources/META-INF/spring.factories 文件,粘贴上面的配置进行修改org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.javadaily.autoconfigure.SwaggerAutoConfiguration建立配置类,从配置文件读取配置先想想我们需要哪些配置,一个title,一个description,还有一个enable用来控制是否开放在线测试,分析清楚了我们就建立对应的配置类SwaggerPropertiesDataConfigurationProperties(prefix = javadaily.swagger)public class SwaggerProperties /* * 是否启用swagger,生产环境建议关闭 */ private boolean enabled; /* * 文档标题 *

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号