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

标签 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开普勒版本和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 Data Commons 版本是 1.7 Spring 数据 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 Error occured processing '/master/WebContent/WEB-INF/config/servlet-context.xml' !STACK 0 java.lang.IllegalAccessError: 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 at org.springframework.data.repository.config.RepositoryComponentProvider.findCandidateComponents(RepositoryComponentProvider.java:121) at org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.getCandidates(RepositoryConfigurationSourceSupport.java:69) at org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:54) at org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:88) at org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:67) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74) at org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver$ElementTrackingNamespaceHandler.parse(DelegatingNamespaceHandlerResolver.java:177) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ErrorSuppressingBeanDefinitionParserDelegate.parseCustomElement(BeansConfig.java:1400) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:494) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.registerBeanDefinitions(BeansConfig.java:402) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.loadBeanDefinitions(BeansConfig.java:388) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) 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>

错误出现在以下行..

最佳答案

在我的情况下,导致问题的是 spring data jpa 版本。我没有使用spring data mongodb,而是使用spring data 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 是一个公共(public)方法,因此 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,尝试了建议的依赖管理,但没有运气。我还根据要求在错误报告中添加了依赖项:列表输出。

关于java - 使用 spring 数据存储库和 mongodb 设置 spring 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118975/

相关文章:

java - Spring Data Jpa查询结果集到对象创建非常慢

java - Spring REST API 播放实时音频

java - 不兼容的类型。找到 : 'org.springframework.beans.factory.annotation.Value' , 需要: 'long'

javascript - 将 $cond 与 DBRef 比较一起使用时运算符 '$ref' 无效

javascript - 从返回的 MongoDB 对象更新 Angular.js $scoped

java - Android Studio - 尝试重新打开已关闭的对象: SQLiteDatabase

java - 如何在 Scala 中将案例类转换为 Json-LD?

macos - 使用 Homebrew 启动/停止 MongoDB

java - Hamcrest Matchers.contains 匹配器不工作(?)

java - 如何使用Spring MVC访问数据库