spring mongo数据异常,通过xml配置

Posted

技术标签:

【中文标题】spring mongo数据异常,通过xml配置【英文标题】:spring mongo data exception, with configuring via xml 【发布时间】:2012-09-23 07:51:22 【问题描述】:

希望有人可以帮助我解决这个问题。我正在使用 mongo 处理 spring-data,但不知何故它给了我一个运行时错误:

2012 年 10 月 2 日晚上 8:15:24 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息:刷新 org.springframework.context.support.ClassPathXmlApplicationContext@54d57bcb:启动日期 [Tue Oct 02 20:15:24 SGT 2012];上下文层次的根 2012 年 10 月 2 日 8:15:24 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源 [mongodb/configuration/mongo-config.xml] 加载 XML bean 定义 线程“主”org.springframework.beans.factory.BeanDefinitionStoreException 中的异常:从类路径资源 [mongodb/configuration/mongo-config.xml] 解析 XML 文档时出现意外异常;嵌套异常是 org.springframework.beans.FatalBeanException: Invalid NamespaceHandler class [org.springframework.data.mongodb.config.MongoNamespaceHandler] for namespace [http://www.springframework.org/schema/data/mongo]: 处理程序问题类文件或依赖类;嵌套异常是 java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationExtension 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) 在 org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 在 org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131) 在 org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:535) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:449) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) 在 org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) 在 parseXML.main(parseXML.java:36) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 原因:org.springframework.beans.FatalBeanException:命名空间 [http://www.springframework.org/schema/data/mongo] 的 NamespaceHandler 类 [org.springframework.data.mongodb.config.MongoNamespaceHandler] 无效:处理程序有问题类文件或依赖类;嵌套异常是 java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationExtension 在 org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:139) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1426) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1421) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ... 19 更多 引起:java.lang.NoClassDefFoundError: org/springframework/data/repository/config/RepositoryConfigurationExtension 在 java.lang.Class.getDeclaredConstructors0(本机方法) 在 java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) 在 java.lang.Class.getConstructor0(Class.java:2714) 在 java.lang.Class.getDeclaredConstructor(Class.java:2002) 在 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104) 在 org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:129) ... 26 更多 引起:java.lang.ClassNotFoundException:org.springframework.data.repository.config.RepositoryConfigurationExtension 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:423) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 32 更多

我的 mongo-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mongo="http://www.springframework.org/schema/data/mongo"
   xsi:schemaLocation="http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/data/mongo
      http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<mongo:db-factory dbname="testuserexample" host="localhost" port="27017" />

<bean id="mongoTemplate">
    <constructor-arg ref="mongoDbFactory" />
</bean>

<mongo:repositories base-package="mongodb.repository" />

提前致谢!

【问题讨论】:

你是否在类路径中添加了 spring-data 依赖项? 嗨!是的,我确实添加了这 3 项: 我的意思是你添加了 spring-data jar 吗?似乎找不到某些类。 hm,我得到了这 3 个 jar:spring-data-common-core.jar spring-data-document-core.jar spring-data-mongodb.jar 在我的项目依赖项中。那是我应该寻找的吗? 【参考方案1】:

如果您使用的是 Maven,这是唯一需要的依赖项:-

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>

应用上下文文件中需要的配置:-

 <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
        <property name="host" value="localhost" />
    </bean>
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongo" />
        <constructor-arg value="test" />
    </bean>

【讨论】:

【参考方案2】:

我也遇到同样的错误。 我为我找到了解决方案。 问题是我已经更改了我的 pom.xml 并为两个依赖项明确设置了最后一个版本(1.1.0.RELEASE):

    spring-data-mongodb spring-data-commons-core

我得到同样的异常:NoClassDefFoundError: ...RepositoryConfigurationExtension

我已经删除了 pom.xml 中的第二个依赖项,因为第一个“spring-data-mongodb”为第二个添加了隐式依赖项。 所以,现在 Maven 自动抓取 spring-data-commons-core 依赖(1.4.0.RELEASE)并且它工作正常!

【讨论】:

【参考方案3】:

如果你使用的是 Maven,你应该为 spring-data-mongodb 库添加依赖

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.1.0.M1</version>
</dependency>

【讨论】:

我试图避免使用 maven,因为我不知道它是如何工作的。所以我刚才试了一下,它起作用了;p。感谢您的回答!

以上是关于spring mongo数据异常,通过xml配置的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC+Mongo简单配置

spring4.x的一些新特性

spring-mongo集成Demo

Spring数据MongoDb配置

Spring 社交 XML 配置

spring小例子(java配置)