• SpringBoot集成Swagger2中不同环境开关配置


    原文: https://xw.qq.com/cmsid/20200402A009S500

    那么,针对该问题,本篇文章为大家提供三种解决方案。选择最适合你的即可。
    方案一:根据条件判断的方式
    此种方式最常见,在配置文件中配置一个标识,比如:
    swagger:
    show : false
    在不需要的环境时,直接设置为false即可。比如dev和test环境的配置文件中设置为true,prod环境中的配置文件设置为false。这些设置与数据库等环境的配置类似。
    swagger:
    show : true
    完成配置文件的配置之后,还要进行使用,此时在初始化Swagger2的配置类中进行注入改属性值。
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    @Value("${swagger.show}")
    private boolean swaggerShow;
    }
    这样配置类就拥有了该属性的值,然后在构造Docket时调用Docket的enable方法,将该值传递进去。
    @Configuration@EnableSwagger2@Profile({"test"})public class SwaggerConfig {
    @Value("${swagger.show}") private boolean swaggerShow;
    @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) // 此处设置是否开启 .enable(swaggerShow) .apiInfo(apiInfo()); // 省略了其他配置 }}
    至此便跟随不同的环境的不同配置,决定是否开启Swagger2了。
    方案二
    基于Profile进行配置。我们知道@Profile可以指定组件在哪个环境的情况下才能被注册到容器中。默认不指定,任何环境下都能注册这个组件。
    我们可以通过@Profile注解来决定是否在指定的环境中进行注入@Configuration
    @EnableSwagger2
    @Profile({"dev","test"})
    public class SwaggerConfig {
    // 省略配置代码
    }
    上述配置中,只有在dev和test环境下才会进行组件的实例化和注入。
    方案三
    该方式还是在第一种方式上进行延伸拓展。还需要配置对应的标识在配置文件中。然后在我们之前讲的WebMvcConfigurer或WebSecurityConfigurerAdapter的实现类中进行指定URL的拦截配置。
    比如:
    @Configuration@ComponentScan(value = "org.xx.interceptor")class WebMvcConfig extends WebMvcConfigurerAdapter { @Value("${swagger.show}") private boolean swaggerShow; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (this.swaggerShow) { registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } }}
    或者根据标识拦截swagger2的Docket扫描的路径,根据不同的环境将Docker调用的paths方法替换成不同的参数:
    .paths(PathSelectors.any())
    或
    .paths(PathSelectors.none())
    如果是线上环境,添加路径过滤,设置为全部都不符合。
    小结
    针对自己所使用的项目情况,可选择不同的方式来进行操作。但个人建议,优先选择第二种,因为此时利用Spring Boot的特性,根本不用去初始化组件,更加省事和安全。其次,可选择第一种方案。
     
  • 相关阅读:
    [rrdtool]监控和自己主动绘图,简单的监控.md
    64位Windows操作系统中的注冊表
    (转载)正向代理与反向代理的区别
    (转载)数据库表分割技术浅析(水平分割/垂直分割/库表散列)
    JavaWeb学习总结(四十九)——简单模拟Sping MVC
    JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
    JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
    JNDI学习总结(一)——JNDI数据源的配置
    哈佛图书馆墙上的训言
    少走弯路的10条忠告
  • 原文地址:https://www.cnblogs.com/hahajava/p/13523830.html
Copyright © 2020-2023  润新知