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

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

目录
相关文章
|
3月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
4月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
展望未来,随着5G、边缘计算等新技术的兴起,微服务架构的设计理念将会更加深入人心,Spring Cloud和Netflix OSS也将继续引领技术潮流,为企业带来更为高效、灵活且强大的解决方案。无论是对于初创公司还是大型企业而言,掌握这些前沿技术都将是在激烈市场竞争中脱颖而出的关键所在。
77 0
|
2月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
58 4
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
55 2
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
103 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
61 0
|
3月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
336 1
|
3月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
61 1
|
4月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
156 2
|
4月前
|
Java Spring
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
下一篇
开通oss服务