在wildfly 11中部署spring应用程序导致"上下文中可能只存在一个AsyncAnnotationBeanPostProcessor。"错误

时间:2017-12-05 16:34:46

标签: java spring spring-mvc jboss wildfly

我们有一个Java Spring 3.2项目,我们正在尝试将项目从jBoss 7迁移到wildFly 11

但是,在部署期间会发生以下错误:

  

无法上传部署:{" WFLYCTL0080:服务失败" => {" jboss.undertow.deployment.default-server.default-host./faultmanager" =>       " java.lang.RuntimeException:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:       上下文中可能只存在一个AsyncAnnotationBeanPostProcessor。违规资源:       \" / d:/wildfly-11.0.0.Final/wildfly-11.0.0.Final/bin/content/xxxx.war/WEB-INF/classes/META-INF/spring/applicationContext.xml \& #34;       引起:java.lang.RuntimeException:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:       配置问题:上下文中可能只存在一个AsyncAnnotationBeanPostProcessor。违规资源:       \" / d:/wildfly-11.0.0.Final/wildfly-11.0.0.Final/bin/content/xxxxxx.war/WEB-INF/classes/META-INF/spring/applicationContext.xml \& #34;       引起:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:       上下文中可能只存在一个AsyncAnnotationBeanPostProcessor。违规资源:       \" / d:/wildfly-11.0.0.Final/wildfly-11.0.0.Final/bin/content/xxxxxx.war/WEB-INF/classes/META-INF/spring/applicationContext.xml \& #34;"}}

通过我们的尝试和搜索,我们得知异常可能由某些原因抛出:

  • applicationContext.xml中的某些bean定义了两次
  • applicationContext.xml导入两次
  • applcationContext.xml中定义的某个bean在另一个文件中再次定义
  • 这可能是由applicationElement.xml中定义的标记引起的,但尝试删除它会在部署期间导致illegalArgumentException(不知道为什么),有趣的是,这似乎并没有在任何地方使用
  • 这可能是由另一个contextl引起的(我们有一个applicationContext-security),但即使删除它也会持续上面的错误

其他有趣的事实:

  • 在构建过程中,永远不会抛出错误,只有在通过wildFly部署
  • 期间
  • 同一个项目已经在jboss工作了一年没有这种问题

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

这只会发生,

1)您可能会在applicationContext-root.xml部分中同时导入applicationContext-where-annotation-driven-is-specififed.xmlWEB.xml

2)在applicationContext-root.xml中制作WEB.xml

2)这是因为你是initializ应用程序上下文两次,但org.springframework.scheduling.config.AnnotationDrivenBeanDefinitionParser第二次注册bean ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME失败。

3)并且spring在配置XML中解析<task:annotation-driven/>文本两次。

可能是其中一个,@ContextConfiguration("/path/to/applicationContext.xml")是父测试类和子测试类