【问题标题】:Setting up spring app with spring data repositories and mongo db使用 spring 数据存储库和 mongodb 设置 spring 应用程序
【发布时间】:2014-04-02 20:39:40
【问题描述】:

在 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 春季数据 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/beans/factory/annotation/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>

错误出现在以下行..

【问题讨论】:

  • 您的错误都引用了 servlet-context.xml。粘贴它,然后粘贴 application-context.xml。

标签: java spring mongodb maven


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    最后,我将 spring jar 版本更改为 4.0.0,然后从 maven 存储库中删除了所有 spring jar,并尝试(首先更新 maven)再次构建..它工作。我很确定它也可以与 4.0.1 spring jars 一起使用。(我有另一个具有相同配置的项目,它在 4.0.1 jars 中运行良好:))我将这个问题贡献给了 maven 和 eclipse。一些我完全不知道的问题。

    【讨论】:

      【解决方案3】:

      确保您不会意外地将较旧的 Spring 版本(3.2.5 之前的版本)拉入类路径。较旧的方法没有公开异常中列出的方法。这就是导致异常的原因。我建议使用以下 Maven 配置 sn-p 来强制所有 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>
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。在花了几个小时解决问题后,@Avnish 的回答为我指明了正确的方向。更具体地说,他在https://jira.springsource.org/browse/DATAJPA-490 提出的问题确实解决了问题。

        Spring-Data-JPA 1.5.1.BUILD-SNAPSHOT 或 1.6.0.BUILD-SNAPSHOT 有一个守卫,可以准确指出是哪个 jar 导致了问题。

        就我而言,我使用的是带有 Spring IDE 3.4.0 的 Eclipse Juno (4.2),这导致了问题。我必须升级到 Spring IDE 3.5.0 才能解决这个问题。我不得不使用http://dist.springsource.com/snapshot/TOOLS/nightly/e4.2 更新站点将Juno 更新到Spring IDE 3.5.0。

        似乎 STS 3.5.0RC1 及更高版本也可以正常工作。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2016-12-13
            • 2021-07-07
            • 2012-05-06
            • 1970-01-01
            • 2011-06-07
            • 2018-08-25
            • 2022-06-25
            • 2015-05-31
            • 2015-10-19
            相关资源
            最近更新 更多