開發生產測試環境中的Swagger


Swagger是我們常用的API Doc工具,非常便於開發人員調試,后台和前端開發人員協作,以及對外公布API使用。如何在生產環境中禁止swagger了?

如何禁止Swagger,方法有很多,我們選擇最簡單實用的,也就是直接在使用@Profile注解。
項目背景介紹, 我們有三個環境dev, test, prod,我們只在dev環境中使用swagger,test和prod都禁止使用,為了體現使用不同profile效果的不同, 我們修改了配置文件中的端口。具體如下

 
這里寫圖片描述

test和prod禁用swagger。 我們只需要這樣

package com.yq.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@Profile("dev")
public class Swagger2 extends WebMvcConfigurationSupport {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //為當前包路徑
                .apis(RequestHandlerSelectors.basePackage("com.yq.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    //構建 api文檔的詳細信息函數,注意這里的注解引用的是哪個
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot 測試使用 Swagger2 構建RESTful API")
                .contact(new Contact("EricYang", "https://github.com/yqbjtu/springbootJpa.git", "test@163.com"))
                .version("1.0")
                .description("User API 描述")
                .build();
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
    }
}

 

開發環境,啟用Swagger
我們看看效果,如果是mvn package -P dev,這樣生成的jar包,啟動后可以看到swagger可以正常訪問。

 
這里寫圖片描述

 

生產環境,禁用Swagger
接下來我們看看prod環境, 首先我們使用mvc package -P prod將代碼編譯打包,然后我們使用java -jar xxxx.jar啟動.
我們新看看mvc package -P prod打包好的jar包有什么不一樣。

 
這里寫圖片描述

 

可以看到新打包的jar中自動將spring.profiles.active=@profileActive@中的profileActive替換為prod了。
啟動后的端口已經是8084

我們再看看swagger,以及rest是否工作正常。


 
這里寫圖片描述

可以通過RestClient正常訪問rest api,但是swagger不能顯示API。

到此為止我們在dev環境中使用swagger, 在test和prod環境中禁用swagger就已經完全實現了,具體代碼在這里,歡迎加星和fork。 謝謝!

注意事項:
如果我們使用mvn package, 默認沒有指定profile,生成的jar中application.properties文件如下

spring.profiles.active=@profileActive@
spring.http.encoding.force=true

info.app.name=bootdemo
info.app.version=1.0.0

server.port=8081

當你啟動的時候,系統提示沒有profile,自動選擇是用8081端口,swagger不能使用,也就是被禁用了。



作者:不1見2不3散4
鏈接:https://www.jianshu.com/p/fa3230ffb27c
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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