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

在前面的文章中我们介绍了Spring Boot如何集成Swagger2及访问权限的控制 。又有一个问题出现了,Swagger2虽然好用,但也不能发布到生产环境吧。

那么,针对该问题,本篇文章为大家提供三种解决方案。选择最适合你的即可。

方案一:根据条件判断的方式(其次)

此种方式最常见,在配置文件中配置一个标识,比如:

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的特性,根本不用去初始化组件,更加省事和安全。其次,可选择第一种方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值