2016-10-18 4 views
3

mongoDbとSpringのmongoTemplateを接続しようとしています。私はまた、 'spring-data-mongodb'のバージョンを1.7.2.RELEASEから1.8.2.RELEASEに変更しようとしましたが、それでも動作しませんでした。mongodbとSpringを接続しているときに、名前が 'mongoTemplate'のBeanを作成する際にエラーが発生しました。

以下は、プロジェクトで使用されている私のコードです。

ここに私のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.storeApp</groupId> 
    <artifactId>storeApp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>Store Application</name> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.1.RELEASE</version> 
    </parent> 

    <dependencies> 
     <!-- <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.2.4.RELEASE</version> 
     </dependency> --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-mongodb</artifactId> 
      <version>1.7.2.RELEASE</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>storeApp</finalName> 
    </build> 
    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <name>Spring Releases</name> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <name>Spring Releases</name> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

マイSpringMongoConfig

package com.storeApp.config; 

    import org.springframework.context.ApplicationContext; 
    import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.data.mongodb.MongoDbFactory; 
    import org.springframework.data.mongodb.core.MongoFactoryBean; 
    import org.springframework.data.mongodb.core.MongoOperations; 
    import org.springframework.data.mongodb.core.MongoTemplate; 
    import org.springframework.data.mongodb.core.SimpleMongoDbFactory; 

    import com.mongodb.MongoClient; 

    @Configuration 
    public class SpringMongoConfig1 { 

     public @Bean 
     MongoDbFactory mongoDbFactory() throws Exception{ 
      return new SimpleMongoDbFactory(new MongoClient(), "storeApp"); 
     } 

     public @Bean 
     MongoTemplate mongoTemplate() throws Exception{ 
      MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory()); 
      return mongoTemplate; 
     } 

    // ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); 
    // MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate"); 
    } 

ファイルこの私のメインクラスです

package com.storeApp.core; 

import java.util.List; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.data.mongodb.core.MongoOperations; 
import org.springframework.data.mongodb.core.query.Criteria; 
import org.springframework.data.mongodb.core.query.Query; 
import org.springframework.data.mongodb.core.query.Update; 

import com.storeApp.config.SpringMongoConfig1; 
import com.storeApp.config.SpringMongoConfig2; 
import com.storeApp.model.Store; 

public class StoreMainApp { 

    public static void main(String[] args) { 

     ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig1.class); 
     MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate"); 

     Store store = new Store("Sample store 1", "Street 1", "City 1", (float) 35.4); 
     System.out.println("into main method"); 
//  mongoOperation.save(store); 
    } 
} 

スタックトレースです:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Oct 18, 2016 10:08:47 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
Oct 18, 2016 10:08:47 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Opened connection [connectionId{localValue:1, serverValue:12}] to 127.0.0.1:27017 
Oct 18, 2016 10:08:47 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Monitor thread successfully connected to server with description ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 10]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=1546838} 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTemplate' defined in com.storeApp.config.SpringMongoConfig1: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/ClassTypeInformation; 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) 
    at com.storeApp.core.StoreMainApp.main(StoreMainApp.java:20) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/ClassTypeInformation; 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 13 more 
Caused by: java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/ClassTypeInformation; 
    at org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper.<clinit>(DefaultMongoTypeMapper.java:49) 
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.<init>(MappingMongoConverter.java:111) 
    at org.springframework.data.mongodb.core.MongoTemplate.getDefaultMongoConverter(MongoTemplate.java:2039) 
    at org.springframework.data.mongodb.core.MongoTemplate.<init>(MongoTemplate.java:217) 
    at org.springframework.data.mongodb.core.MongoTemplate.<init>(MongoTemplate.java:202) 
    at com.storeApp.config.SpringMongoConfig1.mongoTemplate(SpringMongoConfig1.java:25) 
    at com.storeApp.config.SpringMongoConfig1$$EnhancerBySpringCGLIB$$81e5bc96.CGLIB$mongoTemplate$0(<generated>) 
    at com.storeApp.config.SpringMongoConfig1$$EnhancerBySpringCGLIB$$81e5bc96$$FastClassBySpringCGLIB$$52d3ef2d.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309) 
    at com.storeApp.config.SpringMongoConfig1$$EnhancerBySpringCGLIB$$81e5bc96.mongoTemplate(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 14 more 

Not getting where is the problem... 
は、
+0

あなたはおそらく、Springブートによって引き込まれている依存関係と直接のSpringデータ依存関係の間にバージョンの競合があります。それぞれの最新リリース版を手に入れてみてください。 – nbrooks

+0

すでに完了しています.... .... no luck – anukuls

+2

実際には、Spring-Data-mongodbの依存関係はまったく必要ありません。なぜならSpring Bootはそれを取り除かなければならないからです。 – nbrooks

答えて

2

以下の依存関係のみが必要です。必要なすべてのjarファイルが必要になります。

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
    </dependency> 

「java.lang.NoSuchMethodError」というエラーは、ClassTypeInformationクラスのエラーです。 プロジェクトをビルドした後、spring-data-commons-1.12.3.RELEASE.jarが存在することを確認してください。そうでない場合は、ビルド環境をクリーンアップし、Mavenプロジェクトを更新してください。

関連する問題