본문 바로가기

프로그래밍

Spring boot starter data MongoDB interface repository 를 인식하지 못할 때

spring boot로 처음 프로젝트를 진행하면서 생각지도 못한 난관을 만났다. 

mongodb를 spring data 를 이용해 접근하려고하는데 

spring boot starter data를 이용해서 application.yml을 이용해서 서버 정보를 입력해주고

interface를 매핑하려니 매핑이되지 않는다. 매핑은 아래와 같이 했다. 


@Configuration
@ComponentScan({"com.test"})
@MapperScan(“com.test")
@PropertySource({
     "classpath:properties/database-${spring.profiles.active}.properties"
     , "classpath:properties/broker-${spring.profiles.active}.properties"})
@EnableMongoRepositories({"com.test.**.repository"})
public class ApplicationConfiguration {



@EnableMongoRepositories로 basePackages를 지정하여 해당 패키지 하위의 Repository 인터페이스를 인식할 것을 기대했으나,

@Autowired된 부분이 이중 하나를 가리키는데 찾을 수 없다는 메시지를 출력했다. 

해당 패키지에는 정상적으로 아래와 같은 관계를 표기했다.

implements  MongoRepository<TargetVO, String>

여러 사이트에서 찾아본 결과 선언과 매핑 관련된 문제 될 만한 것이 전혀 없어보인다.

이 인터페이스에 @NoRepositoryBean 등을 비롯한 어떤 annotation도 달아두지 않았다.


이 내용을 봐도 딱히 문제가 없어보인다.

문제는 예상도 못한 것에 있었다.
@MapperScan이 바로 그것이다. MyBatis의 xml매핑을 위해서 선언했는데 저 부분을 더 세부적으로 변경하고 나니 
정상적으로 MongoDB의 인터페이스가 인식되었다.

@MapperScan은 DB와 접근시 사용할 interface들의 패키지 위치를 가리키는데 이 부분이 MongoDB의 interface보다 상위에서 존재하여 하위를 타고 참색하다가
interface를 인식해서 자기의 인터페이스로 인식한 것이 아닐까 의심만될뿐이다.. 자세한 내용 아시는 분은 많은 답글 감사합니다.