안녕하세요 오늘은 MSA_structure 프로젝트
를 통해 MSA 구조에 대해 공부하던 중 마주쳤던 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang .NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition .PatternsRequestCondition.getPatterns()" because "this.condition" is null
에러에 대해 원인과 해결법을 알아보겠습니다.
// build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.9' apply(false)
id 'io.spring.dependency-management' version '1.1.0' apply(false)
}
allprojects {
apply plugin: 'java'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
configurations {
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.assertj:assertj-core:3.24.2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
// swagger 의존성
implementation 'io.springfox:springfox-swagger2:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
}
tasks.named('test') {
useJUnitPlatform()
}
코드를 보면 알겠지만 spring boot 2.7.9
를 사용했으며 Java 는 11
을 사용했습니다.
또한, 프로젝트를 진행하면서 Swagger
를 사용하기 위해 가장 최신 버전인 swagger 3.0.0 의존성이 추가된 것을 알 수 있습니다 👾
이후, application을 구동했는데....
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang
.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition
.PatternsRequestCondition.getPatterns()" because "this.condition" is null
처음 보는 오류 메세지가 떴습니다 😱 ....
다행이 해당 오류는 비교적 해결하기 쉬운 오류였습니다 ❗️
오류 원인은 Swagger2 기능을 제공하는 SpringFox
에서 업데이트를 진행하지 않아 SpringBoot 2.6.0 이상 버전에 대해서는 위와 같은 에러가 발생하는 것입니다.
해결방법으로는 2가지가 있습니다 🔥
해당 방법은 build.gradle 을 수정하면 되기 때문에 어렵지 않습니다.
하지만 저는 2번째 방법을 추천합니다. 왜냐하면 버전을 다운그레이드 함으로써 다른 곳에서 예상치 못한 오류가 발생할 수 있기 때문입니다.
spring boot 2.6.0부터 요청 경로를 ControllerHandler에 매칭시키기 위한 전략의 기본값이 ant_path_matcher 전략 -> path_pattern_parser 전략으로 변경되었기 때문에 해당 설정을 해주면 정상적으로 application 이 동작하며 swagger 를 사용할 수 있습니다.
spring 을 이용해 서비스를 설계하면서 버전 문제 때문에 발생하는 오류가 빈번한 것 같습니다.
하지만 중요한 것은 오류가 발생했을때 당황하지 말고 침착하게 구글링 해보는 습관...중요한것 같습니다 👩🔬
[SpringBoot] Failed to start bean documentationPluginsBootstrappe