스프링 부트에 actuator를 build.gradle에 추가하고 app을 돌려봤더니
implementation("org.springframework.boot:spring-boot-starter-actuator")
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException:
이런 오류가 났다
이건 분명 스웨거 오류인데??
spring fox에서 업데이트를 안 해서 생긴 버전 이슈로 아래 코드를 설정해주면 된다.
일단
application.yml 또는 application.properties에 아래 구문을 추가해준다.
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
그리고 스웨거Config에 아래 구문을 추가해준다.
Bean이므로 어디에 추가해도 상관없을 것으로 생각하나 본인은 SwaggerConfig를 관리하는 클래스에 추가하였다.
Swagger.config
import org.springframework.core.env.Environment;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
@Configuration
@EnableSwagger2
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig {
// 중략
@Bean
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier
, ServletEndpointsSupplier servletEndpointsSupplier
, ControllerEndpointsSupplier controllerEndpointsSupplier
, EndpointMediaTypes endpointMediaTypes
, CorsEndpointProperties corsProperties
, WebEndpointProperties webEndpointProperties
, Environment environment) {
List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
allEndpoints.addAll(webEndpoints);
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration()
, new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
}
private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
}
// 중략
}
잘실행된다.