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

Mil*_*ind 5 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属性File就是这样的

<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>
Run Code Online (Sandbox Code Playgroud)

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

有趣的是,我有另一个项目运作良好.唯一的区别是它没有弹簧MVC和杰克逊二进制文件,否则它的类似项目.

异常堆栈跟踪:

!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.data.repository.config.RepositoryComponentProvider访问方法org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations(Lorg/springframework/beans/factory/annotation/AnnotatedBeanDefinition;) at org.springframework.data.repository.config中的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.RepositoryConfigurationDelegate中的.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:54).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)atg.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(De faultBeanDefinitionDocumentReader.java:187)在org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330)在org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(位于org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.registerBeanDefinitions(BeansConfig)的org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:494)中的DefaultBeanDefinitionDocumentReader.java:110) .java:402)org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)at org. org.springframework.beans.factory.xml.X上的springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.loadBeanDefinitions(BeansConfig.java:388)mlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)at at

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>
Run Code Online (Sandbox Code Playgroud)

错误见于以下行..

Avn*_*ish 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,如果它可以帮助任何人.

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

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


Mil*_*ind 2

最后我将 spring jar 版本更改为 4.0.0,然后从 maven 存储库中删除所有 spring jar,并尝试(首先更新 maven)再次构建..它有效。我非常确定它也可以与 4.0.1 spring jar 一起使用。(我有另一个具有相同配置的项目,它与 4.0.1 jar 一起工作得很好:))我将此问题贡献给 Maven 和 Eclipse。有些问题我根本没有任何线索。