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

Java 使用spring数据存储库和mongo db设置spring应用程序,java,spring,mongodb,maven,Java,Spring,Mongodb,Maven,在application-context.xml中定义mongo存储库时,我面临一个问题 以下是我在xml中得到的错误 处理试图访问方法org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations的XML时出错 (Lorg/springframework/beans/factory/annotation/AnnotatedBeanDefinition;)V来自org.

在application-context.xml中定义mongo存储库时,我面临一个问题

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

处理试图访问方法org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations的XML时出错 (Lorg/springframework/beans/factory/annotation/AnnotatedBeanDefinition;)V来自org.springframework.data.repository.config.RepositoryComponentProvider类。请参阅错误日志了解更多详细信息servlet-context.xml/master/WebContent/WEB-INF/config第24行SpringBeans问题

我附上一个env的截图以供参考。 我使用的是EclipseKepler版本,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>
1.7
4.0.1.1发布
2.3.0
1.4.0.1发布
SpringDataCommons版本是1.7 spring data mongo db 1.4版。 打开上下文xml时,我在eclipse项目中看到了错误

有趣的是,我还有一个很好的项目,唯一的区别是它没有SpringMVC和jackson二进制文件,否则它就是类似的项目

异常堆栈跟踪:

!!条目org.springframework.ide.eclipse.beans.core10 2014-03-01 00:04:11.839 !处理时发生消息错误 “/master/WebContent/WEB-INF/config/servlet context.xml”!堆栈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.namespace.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

错误出现在下一行。。

最后,我将spring jar版本更改为4.0.0,然后从maven存储库中删除了所有spring jar,并尝试(首先更新maven)再次构建..成功了。我非常确信它也能与4.0.1 spring JAR一起工作(我有另一个项目,具有相同的配置,并且它与4.0.1 JAR一起工作良好:),我将此问题提交给maven和eclipse。有些问题我一点都不知道。

在我的例子中,是SpringDataJPA版本导致了这个问题。我使用的不是SpringDataMongoDB,而是SpringDataJPA。我从今天的最新版本(SpringFramework 4.0.2.RELEASE,SpringDataJPA1.5.0.RELEASE)开始这个项目。我确保maven的所有可传递依赖项(从spring端以及从spring数据端)都是最新版本的依赖项,但没有锁

按照此线程,尝试将spring版本降级到4.0.0.0版本,但没有成功。我甚至从spring-context-4.0.2.RELEASE.jar(以及spring-context-4.0.0.RELEASE.jar)中探索了org.springframework.context.annotation.AnnotationConfigUtils类并确认processCommonDefinitionAnnotations确实是一个公共方法,因此IllegaAccessError不能成为这些JAR导致的问题

最后,我将我的spring数据jpa从1.5.0.RELEASE降级到1.4.4.RELEASE,瞧,所有问题都在m上解决了
<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>
<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>