#java #spring #mongodb #maven
#java #весна #mongodb #maven
Вопрос:
Я пытаюсь подключить MongoDB через MongoTemplate Spring. Однако при выполнении операций CRUD с базой данных я получаю java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.mapping.MongoPersistentEntity.hasVersionProperty()Z
сообщение об ошибке
Вот мой pom.xml
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- mongodb java driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.10.1</version>
</dependency>
<!-- Spring data mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.2.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
</exclusion>
<!-- <exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion> -->
<!-- <exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion> -->
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
</plugins>
</build>
Мой файл mongoconfiguration
@Configuration
public class SpringMongoConfig1 {
@Bean
MongoDbFactory mongoDbFactory() throws Exception{
return new SimpleMongoDbFactory(new MongoClient(), "storeApp");
}
@Bean
MongoTemplate mongoTemplate() throws Exception{
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
return mongoTemplate;
}
}
основной класс проекта
public class StoreMainApp {
public static void main(String[] args) {
System.out.println("into main method");
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig1.class);
MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");
Store store1 = new Store("Sample store 1", "Street 1", "City 1", (float) 35.4);
System.out.println("store1 city : " store1.storeCity);
mongoOperation.insert(store1);
}
}
Если я использую mongoOperation.createCollection(«stores»); , он работает нормально, и в базе данных создается коллекция с именами хранилищ, однако любой метод mongoOperation.save() или mongoOperation.insert() не выполняется.
Следующая трассировка стека :
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.mapping.MongoPersistentEntity.hasVersionProperty()Z
at org.springframework.data.mongodb.core.MongoTemplate.initializeVersionProperty(MongoTemplate.java:669)
at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:651)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:613)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:604)
at com.storeApp.core.StoreMainApp.main(StoreMainApp.java:33)
Комментарии:
1. Вы уверены, что ваш проект компилируется с обновленным pom.xml ? Я попробовал это, и это выдает ошибки компиляции.
Ответ №1:
выдача a mvn dependency:tree -Dverbose
покажет, есть ли у вас какие-либо конфликты jar. Я сам выполнил команду, и я вижу, что у вас должна mongo-java-driver
быть версия 2.11.0
, в то время как в org.springframework.data:spring-data-mongodb:jar:1.2.0.RELEASE
ссылках org.mongodb:mongo-java-driver:jar:2.10.1
Поэтому убедитесь, что у вас одинаковые версии конфликтующих jar.
[INFO] - org.springframework:spring-core:jar:3.2.2.RELEASE:compile
[INFO] | - commons-logging:commons-logging:jar:1.1.1:compile
[INFO] - org.springframework:spring-context:jar:3.2.2.RELEASE:compile
[INFO] | - org.springframework:spring-aop:jar:3.2.2.RELEASE:compile
[INFO] | | - aopalliance:aopalliance:jar:1.0:compile
[INFO] | | - (org.springframework:spring-beans:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] | | - (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] | - org.springframework:spring-beans:jar:3.2.2.RELEASE:compile
[INFO] | | - (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] | - (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] | - org.springframework:spring-expression:jar:3.2.2.RELEASE:compile
[INFO] | - (org.springframework:spring-core:jar:3.2.2.RELEASE:compile - omitted for duplicate)
[INFO] - org.mongodb:mongo-java-driver:jar:2.11.0:compile
[INFO] - org.springframework.data:spring-data-mongodb:jar:1.2.0.RELEASE:compile
[INFO] | - org.springframework:spring-tx:jar:3.1.4.RELEASE:compile
[INFO] | | - (aopalliance:aopalliance:jar:1.0:compile - omitted for duplicate)
[INFO] | | - (org.springframework:spring-aop:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | | - (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | | - (org.springframework:spring-context:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | | - (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | - (org.springframework:spring-context:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | - (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | - (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | - (org.springframework:spring-expression:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | - org.springframework.data:spring-data-commons:jar:1.5.0.RELEASE:compile
[INFO] | | - (org.springframework:spring-core:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | | - (org.springframework:spring-beans:jar:3.1.4.RELEASE:compile - omitted for conflict with 3.2.2.RELEASE)
[INFO] | | - (org.slf4j:slf4j-api:jar:1.7.1:compile - omitted for conflict with 1.7.21)
[INFO] | | - (org.slf4j:jcl-over-slf4j:jar:1.7.1:runtime - omitted for conflict with 1.7.1)
[INFO] | - (org.mongodb:mongo-java-driver:jar:2.10.1:compile - omitted for conflict with 2.11.0)
[INFO] | - (org.slf4j:slf4j-api:jar:1.7.1:compile - omitted for conflict with 1.7.21)
[INFO] | - (org.slf4j:jcl-over-slf4j:jar:1.7.1:compile - scope updated from runtime; omitted for duplicate)
[INFO] - cglib:cglib:jar:2.2.2:compile
[INFO] - asm:asm:jar:3.3.1:compile
Обновить
это pom.xml работает на меня:
<dependencies>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<!-- mongodb java driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.10.1</version>
</dependency>
<!-- Spring data mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
</dependencies>
Убедитесь, что вы очистили и создали свой проект.
Комментарии:
1. Спасибо…. Я удалил все конфликтующие зависимости, ошибка по-прежнему сохраняется.
2. Как вы запускаете свой проект? Это
jar
илиwar
? Как вы его создаете? Вы выполняете чистую предварительную сборку, напримерmvn clean package
?hasProperty()
метод должен быть доступен вMongoPersistentEntity
суперклассе, если вы загружаете также источники ваших зависимостей, вы должны быть в состоянии его увидеть.3. Я буду запускать его с помощью jar, но чтобы протестировать его прямо сейчас, я запускаю его, создав метод main.