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

在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就是这样的

 1.7 4.0.1.RELEASE 2.3.0 1.4.0.RELEASE 

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

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

exception堆栈跟踪:

!ENTRY org.springframework.ide.eclipse.beans.core 1 0 2014-03-01 00:04:11.839!MESSAGEerror handling’/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)at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(De faultBeanDefinitionDocumentReader.java:187)atg.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330)at 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

                         

错误见于以下行..

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

在这个post之后,尝试将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,尝试了依赖管理建议,但没有运气。 我还根据请求将依赖项列表输出添加到错误报告中。

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

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

    org.springframework spring-framework-bom 4.0.2.RELEASE pom import    

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

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

在我的例子中,我使用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及更高版本也可以使用它。

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

这在https://jira.springsource.org/browse/DATAJPA-490中提到,但不是那么清楚。