Spring 데이터 MongoTemplate이 DataAccessException을 발생시키지 않습니다.

StackOverflow https://stackoverflow.com//questions/12662193

  •  11-12-2019
  •  | 
  •  

문제

저는 MongoDB를 배우고 동시에 Spring 프레임워크를 사용하여 간단한 REST 애플리케이션을 작성하려고 합니다.

나는 간단한 모델을 가지고 있습니다 :

@Document
public class Permission extends documentBase{

@Indexed(unique = true)
private String name;

public   Permission(String name) {
    this.name = name;       
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

그런 다음 간단한 DAO가 있습니다.

@Repository
@Transactional 
@Profile({"production","repositoryTest","mongoIntegrationTest"})
public class DaoImpl   implements DAO  {

@Autowired
protected MongoTemplate mongoTemplate;

public <T> T addObject(T object) {               
     mongoTemplate.insert(object);        
     return object; 
}

통합 테스트가 있습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml", classpath:IntegrationContext.xml"},loader = TestXmlContextLoader.class)
@ActiveProfiles("mongoIntegrationTest")
public class RepositoryIntegrationTest extends AccountTestBase{

    @Autowired DAO repository;
    @Autowired WebApplicationContext wac;

    @Test
public void AddPermission() { 
    Permission permission_1 = new Permission("test");           
    Permission permission_2 = new Permission("test");           
    repository.addObject(permission_1);
    repository.addObject(permission_2);
}
}

내 구성:

 <!-- MongoDB host -->
 <mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}"/> 

 <!-- Template for performing MongoDB operations -->
 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" 
c:mongo-ref="mongo" c:databaseName="${mongo.db.name}"/>

"permission_2"를 추가하면 MongoDB에서 예외가 발생하여 Spring에 의해 변환되고 DAO에서 DataAccessException으로 포착될 것으로 예상됩니다.

MongoDb의 로그 파일을 보면 중복된 예외가 발생했지만 DAO에 도달하지 못한 것을 볼 수 있습니다.

그래서,, 내가 뭔가 잘못하고 있는 것 같지만, 지금은,, 내 실수에 눈이 멀었습니다.

//엘지

도움이 되었습니까?

해결책

구성했는지 확인하세요. WriteConcern ~의 MongoTemplate 기본값이 아닌 것으로(예: WriteConcern.SAFE).기본적으로 MongoDB는 Fire-and-forget 모드에 있으며 일반적으로 인덱스 위반이나 서버 오류에 대한 예외를 발생시키지 않습니다.

다른 팁

여전히 이것으로 고생합니다. Finnally 나는 이식 번역을 일하기 위해 성공했다.MongoDB는 Spring 데이터 예외로 변환되는 예외를 throw합니다.

이제는 또 다른 문제가 있습니다.

위의 DAO는 다음 코드가 있습니다.

     @ExceptionHandler(DataAccessException.class)
     public void handleDataAccessException(DataAccessException ex) {
            // For debug only
                            DataAccessException test = ex;
            test.printStackTrace();

      }
.

이 코드가 예외를 잡을 것으로 예상을 기대하고 있었지만 이것은 그렇지 않습니다.

왜 그렇지 않습니까?

// lasse

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top