4. JAVA
Springboot swagger를 phaze(dev,prod,real) 별로 활성 비활성 하는 방
자르르
2022. 5. 3. 17:17
swagger-ui를 적용하면 아주 편하고 좋다.
하지만, 이건 개발서버에서만 노출해야 하고, real(prod)에서는 비노출 하는게 맞다.
환경(phaze) 별로 활성/비활성 하는 방법을 3가지 적겠다.
셋중 하나를 적용하면 된다.
1. 설정파일(application) 설정
application.properties 파일 설정의 경우
[prod 설정 (application-prod.properties)]
-> springfox.documentation.enabled=false
[dev 설정 (application-dev.properties)]
-> springfox.documentation.enabled=true
application.yml 파일 설정의 경우
[prod 설정]
springfox:
documentation:
enabled: false
[dev 설정]
springfox:
documentation:
enabled: false
2. 설정파일(application)에서 변수 설정 후, SwaggerConfig 클래스에서 설정
위에 설명한 설정 파일에서 한가지 변수를 설정
swaggerYn=true (dev)
swaggerYn=false (prod)
@Configuration
public class SwaggerConfig implements EnvironmentAware {
private Environment environment;
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.demo.example.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo())
.enable(Boolean.parseBoolean(environment.getProperty("swaggerYn")));
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
}
물론
@Value("${swaggerYn}")
private String swaggerYn;
으로 프로퍼티 값을 가져와서 사용해도 된다. 이게 더 낫네..
3. @Profile 설정
이 설정은 swagger에서 제공한다기 보다는 spring에서 제공하는 어노테이션이다.
위에 SwaggerConfig 파일 위에 설정해주면 된다.
@Profile({"local", "dev"})
@Configuration
public class SwaggerConfig implements EnvironmentAware {
....
...
}
근대 이 3번 설정에서 prod에서 swagger-ui 호출 url로 접속하면, 이상하게 서버(내장톰캣) 자체가 죽어버리는 현상이 발생한다...