在 MongoDB 的 spring-data 中配置 GridFS 模板

Posted

技术标签:

【中文标题】在 MongoDB 的 spring-data 中配置 GridFS 模板【英文标题】:Configuring GridFS template in spring-data for MongoDB 【发布时间】:2014-07-22 04:25:47 【问题描述】:

我在我的 Spring 应用程序中配置 MongoDB 时遇到了麻烦(我将 Spring Data 用于 mongo db)。这是负责mongodb的配置部分

<mongo:mongo host="localhost" port="27017"/>
<mongo:db-factory id="mongoDbFactory" dbname="yourdb" />

<mongo:mapping-converter id="converter" />

<bean name="gridFsTemplate" class="org.springframework.data.mongodb.gridfs.GridFsTemplate">
    <constructor-arg ref="mongoDbFactory" />
    <constructor-arg ref="converter" />
</bean>

当我启动应用程序时,我得到以下日志:

引起:org.springframework.beans.factory.BeanCreationException: 创建名称为“转换器”的 bean 时出错:bean 的实例化 失败的;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [org.springframework.data.mongodb.core.convert.MappingMongoConverter]: 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/TypeInformation; 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:278) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1114) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1017) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:320) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] ... 93个常用框架 省略原因: org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [org.springframework.data.mongodb.core.convert.MappingMongoConverter]: 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/TypeInformation; 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] ... 102个常用框架 省略引起:java.lang.NoSuchMethodError: org.springframework.data.util.ClassTypeInformation.from(Ljava/lang/Class;)Lorg/springframework/data/util/TypeInformation; 在 org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper.(DefaultMongoTypeMapper.java:49) ~[spring-data-mongodb-1.4.2.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.convert.MappingMongoConverter.(MappingMongoConverter.java:110) ~[spring-data-mongodb-1.4.2.RELEASE.jar:na] 在 org.springframework.data.mongodb.core.convert.MappingMongoConverter.(MappingMongoConverter.java:126) ~[spring-data-mongodb-1.4.2.RELEASE.jar:na] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) ~[na:1.8.0_05] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_05] 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_05] 在 java.lang.reflect.Constructor.newInstance(Constructor.java:408) ~[na:1.8.0_05] 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ~[spring-beans-4.0.2.RELEASE.jar:4.0.2.RELEASE] ... 104个常用框架 省略

我假设我应该将 'type-mapper-ref' 添加到 'converted' bean,但我不知道应该提供什么值。

这个例子有几乎相似的配置:http://www.mkyong.com/mongodb/spring-data-mongodb-save-binary-file-gridfs-example/

或许有对mongodb比较熟悉的朋友可以给我解答一下?

【问题讨论】:

【参考方案1】:

将 spring-data-mongodb 的版本从“1.5.0.RC”更改为“1.5.0.RELEASE”,将 spring-data-commons 的版本从“1.8.0.RC1”更改为“1.8.0.RELEASE” ' 并且它解决了这个问题。可能 api 已更改,不再出现“NoSuchMethodError”。

【讨论】:

以上是关于在 MongoDB 的 spring-data 中配置 GridFS 模板的主要内容,如果未能解决你的问题,请参考以下文章

通过 spring-data 迭代 MongoDB 中的大型集合

Spring-data MongoDB地理查询

使用 Spring-Data 配置 MongoDb 时出现异常

“没有找到类型的属性”......将 QueryDslPredicateExecutor 与 MongoDB 和 Spring-Data 一起使用时

SpringData,JPA,MongoDB,Solr,Elasticsearch底层逻辑关系

MongoDB使用记录