[ T I L ] 2024.03.13

오세창·2024년 3월 13일

TIL

목록 보기
10/18

문제

프로젝트 진행 간 Controller 의 이름을 변경할 일이 생겼다.

기존 RestaurantMananementController 가 있었는데 이를 RestaurantOwnerController 로 변경하였다.

이후 어플리케이션을 실행하니

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcHandlerMappingIntrospector' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Ambiguous mapping. Cannot map 'restaurantOwnerController' method 
jpabook.dashdine.controller.restaurant.RestaurantOwnerController#readAllRestaurant(UserDetailsImpl)
to {GET [/owner/restaurant]}: There is already 'restaurantManagementController' bean method

이와 같은 에러가 발생한 것이다.

{GET [/owner/restaurant]} 해당 Api가 이미 RestaurantMananementController 에 존재한다는데,,, 난 해당 Controller 는 이름을 변경했는데 ?!

시도

찾아보니 해당 문제는 변경 사항이 완전히 적용되지 않았거나, 이전 클래스의 흔적이 여전히 어딘가에 남아있어서 발생할 수 있다고 한다.

현재 나는 빌드 환경을 intelliJ 에서 수행하는 것이 아니고 Gradle 이다.

이에 해당 문제는 IDE 의 캐시를 지우면 해결할 수 있다고 한다.

./gradlew clean

터미널에 현재 빌드 환경에 맞게 명령어를 입력하였다.

해결

2024-03-13T15:38:22.058+09:00  INFO 78809 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
2024-03-13T15:38:22.058+09:00  INFO 78809 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.2
2024-03-13T15:38:22.058+09:00  INFO 78809 --- [           main] org.quartz.core.QuartzScheduler          : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@42530cd6
2024-03-13T15:38:22.099+09:00  INFO 78809 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8081 (http) with context path ''
2024-03-13T15:38:22.099+09:00  INFO 78809 --- [           main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
2024-03-13T15:38:22.099+09:00  INFO 78809 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
2024-03-13T15:38:22.106+09:00  INFO 78809 --- [           main] jpabook.dashdine.DashDineApplication     : Started DashDineApplication in 3.11 seconds (process running for 3.584)

문제 없이 빌드가 되고 서버가 가동되는 것을 확인할 수 있었다.

알게된 점

클래스의 이름을 변경하거나 이동시킨 후, 종종 이전 클래스명이나 설정의 흔적이 빌드 시스템의 캐시에 남아있어서 예상치 못한 문제가 발생할 수 있다는 것을 알게되었다.

이럴 때는 우선 빌드에서 이전에 생성된 산출물을 지워보자 !

0개의 댓글