2014-10-22 2 views
1

통합 테스트 실행 사이의 모든 데이터베이스를 비울 수 있기를 원합니다. 내 첫 번째 생각은 @TestExecutionListeners 주석을 사용하여 등록 된 org.springframework.test.context.support.AbstractTestExecutionListener 주석을 사용하여 테스트간에 필요한 정리를 수행하는 것이 었습니다.스프링 데이터 가져 오기 MongoDB에서 인덱스 다시 만들기

afterTestMethod(TestContext testContext) 방법에서는 데이터베이스를 테스트 컨텍스트에서 가져오고 com.mongodb.DB.drop() 메서드를 사용했습니다. 이것은 관리 된 @Document 오브젝트를 처음 바인딩 할 때 Spring 데이터에 의해 자동으로 작성된 인덱스를 파괴한다는 점을 제외하고는 정상적으로 작동했습니다. 다음과 같이

는 지금 내가 컬렉션 이름을 반복하는 의지와 제거 호출하여이 문제를 해결 한 :

for (String collectionName : database.getCollectionNames()) { 
     if (collectionIsNotASystemCollection(collectionName) 
      database.getCollection(collectionName).remove(new BasicDBObject()); 

    } 

이 작동하고 원하는 결과를 얻을 -하지만 방법이 있다면 그것은 좋은 것 간단히 데이터베이스를 삭제하고 스프링 데이터에 "리 바인드"를 요청하고 필요한 인덱스를 모두 만들 때 시작한 것과 동일한 초기화를 수행 할 수 있습니다. 그게 조금 더 깨끗하고 안전하다고 느낀다.

나는 org.springframework.data.mongodb.core.mapping.MongoMappingContext으로 놀아 보았지만, 내가 원하는 것을 할 수있는 방법이 있다면 아직 해결하지 못했다.

누구에게 가이드를 제공 할 수 있습니까?

답변

1

this ticket을 참조하십시오. 현재 작동하는 이유와이 문제를 해결하면 더 많은 문제가 발생하는 이유를 설명합니다.

당신이 Hibernate로 작업하고 있고 데이터베이스를 삭제하기 위해 호출을 시작한다고 가정하면, 테이블과 모든 인덱스가 마술처럼 다시 나타납니다. MongoDB 데이터베이스/콜렉션을 삭제하면 관련된 모든 메타 데이터가 제거됩니다. 따라서, 당신이 원하는대로 설정해야합니다.

추신 : 자동 인덱싱 지원을 추가하는 데 도움이되었는지 확신 할 수 없습니다. 처음 의견에서 설명한 단점이 없으면 어떻게 달성 할 수 있는지 제안이 있으면 티켓에 자유롭게 의견을 말하십시오.

관련 문제