使用spring数据存储库和mongodb设置spring应用程序

时间:2014-03-01 19:06:38

标签: java spring mongodb maven

在application-context.xml

中定义mongo存储库时遇到问题

以下是我在xml中得到的错误

  

Error occured processing XML tried to access method org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations (Lorg/springframework/beans/factory/annotation/AnnotatedBeanDefinition;)V from class org.springframework.data.repository.config.RepositoryComponentProvider'. See Error Log for more details servlet-context.xml /master/WebContent/WEB-INF/config line 24 Spring Beans Problem

我附上了env的截图供参考。 我正在使用eclipse Kepler版本和pom属性文件就像这样

<java-version>1.7</java-version>
<org.springframework-version>4.0.1.RELEASE</org.springframework-version>
<org.jackson-version>2.3.0</org.jackson-version>
<spring-data-mongodb>1.4.0.RELEASE</spring-data-mongodb>

Spring数据公共版本是1.7 spring data mongo db 1.4版。 当我打开上下文xml时,我在eclipse项目中看到了错误。

有趣的是,我有另一个项目运作良好。唯一的区别是它没有spring MVC和jackson二进制文件,否则它的类似项目。

异常堆栈跟踪:

  

!ENTRY org.springframework.ide.eclipse.beans.core 1 0 2014-03-01   00:04:11.839!MESSAGE错误发生处理   '/master/WebContent/WEB-INF/config/servlet-context.xml'!STACK 0   java.lang.IllegalAccessError:试图访问方法   org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations(Lorg / springframework的/豆类/工厂/注解/ AnnotatedBeanDefinition;)V   来自课堂   org.springframework.data.repository.config.RepositoryComponentProvider     在   org.springframework.data.repository.config.RepositoryComponentProvider.findCandidateComponents(RepositoryComponentProvider.java:121)     在   org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.getCandidates(RepositoryConfigurationSourceSupport.java:69)     在   org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:54)     在   org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:88)     在   org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:67)     在   org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)     在   org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver $ ElementTrackingNamespaceHandler.parse(DelegatingNamespaceHandlerResolver.java:177)     在   org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427)     在   org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ErrorSuppressingBeanDefinitionParserDelegate.parseCustomElement(BeansConfig.java:1400)     在   org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417)     在   org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187)     在   org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330)     在   org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:494)     在   org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.registerBeanDefinitions(BeansConfig.java:402)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)     在   org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.loadBeanDefinitions(BeansConfig.java:388)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)     在

servlet context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven />


    <context:component-scan base-package="com.xxxx.yyyyy" />

    <!-- Mongo DB Configuration -->
    <mongo:mongo id="mongo" host="monopolyvm3" port="27017" />
    <mongo:db-factory dbname="test" mongo-ref="mongo" />
    <mongo:db-factory id="mongoDbFactory" dbname="cloud" mongo-ref="mongo" />
    <mongo:repositories base-package="com.xxxx.yyyyy" />

    <bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />

    <bean id="defaultMongoTypeMapper"
        class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
        <constructor-arg name="typeKey"><null/></constructor-arg>
    </bean>

    <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        <constructor-arg name="mappingContext" ref="mappingContext" />
        <property name="typeMapper" ref="defaultMongoTypeMapper" />
    </bean>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
        <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
        <property name="writeConcern" value="SAFE" />
    </bean>




</beans>

错误见于以下行..

5 个答案:

答案 0 :(得分:13)

在我的情况下,它是导致问题的spring数据jpa版本。我没有使用spring数据mongodb而是使用spring数据jpa。我今天开始使用最新版本( spring-framework 4.0.2.RELEASE,spring-data-jpa 1.5.0.RELEASE )。我确保maven的所有传递依赖(来自spring端和spring数据端)是最新版本但没有锁定。

遵循此主题,尝试将spring版本降级到4.0.0.RELEASE但没有运气。我甚至在我的工作区内从spring-context-4.0.2.RELEASE.jar(以及spring-context-4.0.0.RELEASE.jar)中探索了org.springframework.context.annotation.AnnotationConfigUtils类,并确认了processCommonDefinitionAnnotations是一个公共方法,因此IllegalAccessError不能成为这些jar产生的问题。

最后,我将我的spring-data-jpa从1.5.0.RELEASE降级到1.4.4.RELEASE,并且所有问题都在maven更新中得到解决。如果它可以帮助任何人,我正在使用STS 3.4。

由于这是我在谷歌搜索此错误时发现的第一篇文章,想到将其发布在此处,以便其他遇到相同问题的人可以通过此提示解决问题。我在https://jira.springsource.org/browse/DATAJPA-490

打开了错误报告

@Oliver,尝试过依赖管理建议,但没有运气。我还根据请求将依赖项列表输出添加到错误报告中。

答案 1 :(得分:2)

最后我将spring jar版本更改为4.0.0,然后从maven存储库中删除所有spring jar并尝试(再次更新maven)再次构建..它工作正常。我很确定它也适用于4.0.1弹簧罐。(我正在使用相同配置的另一个项目,它与4.0.1罐子工作正常:))我将这个问题贡献给maven和eclipse。有些问题我根本没有任何线索。

答案 2 :(得分:1)

确保您不会意外地将较旧的Spring版本(3.2.5之前的版本)引入类路径。旧方法没有公共异常中列出的方法。然后这会导致异常。我建议使用以下Maven配置代码段来强制所有Spring库都在4.0.2中:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-framework-bom</artifactId>
      <version>4.0.2.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

答案 3 :(得分:0)

我遇到了同样的问题。花了几个小时与这个问题作斗争@ Avnish的回答指出了我正确的方向。更具体地说,他在https://jira.springsource.org/browse/DATAJPA-490开设的问题确实让事情变得清晰。

Spring-Data-JPA 1.5.1.BUILD-SNAPSHOT或1.6.0.BUILD-SNAPSHOT有一个防护装置,可以准确指出导致问题的罐子。

在我的情况下,我使用Eclipse Juno(4.2)和Spring IDE 3.4.0导致了这个问题。我不得不升级到Spring IDE 3.5.0以使问题消失。我不得不使用http://dist.springsource.com/snapshot/TOOLS/nightly/e4.2更新站点将Juno更新到Spring IDE 3.5.0。

似乎STS 3.5.0RC1及更高版本也能正常运行。

答案 4 :(得分:0)

真正的解决方案是将您的eclipse / STS spring插件升级到最新版本。

https://jira.springsource.org/browse/DATAJPA-490中提到了这一点,但不是很清楚。