2 개의 데이터 소스를 사용하는 Spring 4 응용 프로그램이 있습니다. 하나는 MongoDB입니다. 가까운 쿼리를 수행 할 때 다음 오류가 발생합니다.봄 - mongoDb 오류 : com.mongodb.WriteConcernException : "색인에 부적절한 ns"
org.springframework.web.util.NestedServletException : 요청 처리가 실패했습니다. 중첩 예외는 com.mongodb.WriteConcernException : { "serverUsed": "aValideMongoDB", "err": "인덱스에 유효하지 않은 ns", "code": 10096, "n": 0, "connectionId": 955, "ok" : 1.0}
실패 코드 :
private List<GeoSearchDealer> doDealerQuery(NearQuery nearQuery, DistanceKind distanceKind) {
// FAILS AT THIS LINE
GeoResults<InventoryDealer> results = mongoTemplate.geoNear(nearQuery, InventoryDealer.class);
List<GeoSearchDealer> dealers = new ArrayList<GeoSearchDealer>();
for (GeoResult<InventoryDealer> result : results) {
...
}
return dealers;
}
모두가 프로그래밍 방식으로 생성된다, 그래서 아무 XML. 다음은 설정 클래스는 다음과 같습니다
@Configuration
@ComponentScan("path.to.code.base")
@EnableWebMvc
@EnableTransactionManagement
@EnableMongoRepositories("path.to.code.base")
@EnableSpringDataWebSupport
@EnableMongoAuditing
public class AppConfig {
// other beans omitted for brevity
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
MongoClient mongoClient = new MongoClient(mongoHost);
return new SimpleMongoDbFactory(mongoClient, mongoDb);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
return mongoTemplate;
}
}
InventoryDealer 클래스 :
@Document(collection="inventory_dealer")
public class InventoryDealer {
...
}
의 pom.xml :
<spring.version>4.0.6.RELEASE</spring.version>
...
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.6.1.RELEASE</version>
</dependency>
...
이 코드는 일하는 프로토 타입 응용 프로그램에서 이식 된
만 사용하고 있었다
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
그래서 Geo 클래스의 ome에는 일부 가져 오기가 변경되었지만 주요한 것은 없습니다. 여기서 내가 잘못하고있는 것은 무엇입니까?
나는이의 pom.xml 구성을 사용하는 경우 버그가 봄 드라이버에있다
실패하기 시작하지만, 본질적으로하는이 버그는 Java mongo 드라이버의 2.11.3 버전에서 발생하며 최신 버전을 사용하는 경우 1.4.1 이전 버전의 spring-data-mongodb 라이브러리 만 사용할 수 있습니다. –
나는보고 싶은 것에 대한 제안을하고 싶습니다. 몽고를 사용하지만 스프링을 사용하지 마십시오. 소금 한 알로 이것을 가져 가십시오. 당신이 지리적으로하고있는 일에 대한 변경 사항과 색인 생성에 관한 오류를 언급하기 때문에 언급합니다. - mongo에는 허용되는 지역 인덱스에 몇 가지 변경 사항이 있습니다. 오류를 작성할 수있는 인덱스가있을 수 있습니다 (예 : 잘못된 GeoJson 객체를 2dsphere 인덱스에 작성합니다. 셸에서 직접 수행하려고하는 동일한 쓰기 작업을 수행 할 수 있는지 확인하십시오. 불법 쓰기 인 경우 셸에서 같은 오류가 표시됩니다. –
@SteveB 문제는 명시된 바와 같습니다 - 드라이버 문제가 있습니다. 프로토 타입이 작동하면서 이식 할 때 쿼리가 작동하지만 이전 버전의 라이브러리를 사용하는 것으로 알고있었습니다. 나는 모든 것을 최신 버전으로 이식했고 모두 작동을 멈췄다. 나는 이전 버전으로 갔고 작동하기 시작했다. java-mongo-driver 2.11.3과 spring-data-mongodb 1.6.1의 조합입니다. 두 버전 중 하나를 다시 이동하면 작업이 시작됩니다. 나는 java-mongo-driver 2.11.0으로 돌아 가기로 결심했다. –