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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM