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를 인식해서 자기의 인터페이스로 인식한 것이 아닐까 의심만될뿐이다.. 자세한 내용 아시는 분은 많은 답글 감사합니다.
'프로그래밍' 카테고리의 다른 글
IIS 서버 호출시 기본 디렉터리 탐색현상 처리 (0) | 2019.07.23 |
---|---|
Spring boot mongo DB replica set 설정하기, xml에서 java config로 전환 (0) | 2019.02.20 |
[maven] maven-resources-plugin을 이용한 properties.xml 별도 배포 (0) | 2018.07.13 |
maven clean install 후 runnable jar 배포설정 (0) | 2018.07.13 |
AOP 사용하지 않던 프로젝트에 AOP 추가 시 발생한 문제 (0) | 2018.07.09 |