Spring Boot中Configuration problem: Cannot locate BeanDefinitionParser for element 的问题分析

环境信息

Spring Boot 2.0.2 JDK 8, OS: windows 7

问题的提出

今天在开发中,碰到一下类似的错误信息:

15:44:09.198 INFO  com.jd.ai.cv.api.PubAPIApplication.logStarting@50 - Starting PubAPIApplication on ZB-PF0V10MN with PID 4324 (D:\CodeSpace\photobuyapi\target\classes started by chenjunfeng1 in D:\CodeSpace\photobuyapi)
15:44:09.203 DEBUG com.jd.ai.cv.api.PubAPIApplication.logStarting@53 - Running with Spring Boot v2.0.2.RELEASE, Spring v5.0.6.RELEASE
15:44:09.204 INFO  com.jd.ai.cv.api.PubAPIApplication.logStartupProfileInfo@659 - No active profile set, falling back to default profiles: default
15:44:09.252 INFO  org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext.prepareRefresh@590 - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6422b7d4: startup date [Fri May 18 15:44:09 CST 2018]; root of context hierarchy
15:44:09.708 INFO  org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions@316 - Loading XML bean definitions from class path resource [spring-config-jmq.xml]
15:44:09.776 WARN  org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext.refresh@558 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser for element [listener]
Offending resource: class path resource [spring-config-jmq.xml]
15:44:09.781 INFO  org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener.logAutoConfigurationReport@101 - 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
15:44:09.787 ERROR org.springframework.boot.SpringApplication.reportFailure@842 - Application run failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser for element [listener]
Offending resource: class path resource [spring-config-jmq.xml]
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.fatal(FailFastProblemReporter.java:62) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java:90) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java:68) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.findParserForElement(NamespaceHandlerSupport.java:86) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1366) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1352) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:178) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:148) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:98) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:223) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:194) ~[spring-beans-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromImportedResources$0(ConfigurationClassBeanDefinitionReader.java:352) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[?:1.8.0_144]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:319) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:144) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:328) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.0.6.RELEASE.jar:5.0.6.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar:2.0.2.RELEASE]
    at com.jd.ai.cv.api.PubAPIApplication.main(PubAPIApplication.java:16) [classes/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.2.RELEASE.jar:2.0.2.RELEASE]

好奇怪的问题呀……

问题的分析

其中的关键信息是:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser for element [listener]
Offending resource: class path resource [spring-config-jmq.xml]

从上述错误信息分析,可知问题在spring-config-jmq.xml文件中,这个是非常明显的。错误的问题是在解析Bean的时候出现的BeanDefinitionParsingException,原因是Confgiuration错误,元素错误,其中的一个元素是listener。
结合这个错误信息可知,listener这个节点在与某个Bean的解析中,发生了问题,至于是什么问题,需要结合配置文件来分析。
查看之后发现:

<jmq:listener topic="aifashion_producer" listener="consumertest" />
.......................
<jmq:consumer id="consumer" transport="jmq.transport" longPull="10000" pullTimeout="11000" autoStart="true">
<jmq:listener topic="@sys.jmq.product.topic.price@" listener="productPriceListener" maxConcurrent="10" minConcurrent="1" />
</jmq:consumer>

在上述配置中,可以发现listener节点竟然没有放在jmq:consumer节点中,所以导致了此问题的发生。真是汗颜呀,纯粹声明的时候晕了头……

总结

低级错误一个,但是基于异常信息来分析得出问题的大致根源和方向是最有价值的一件事情。

### 回答1: 这个错误提示是指在解析 yarn-site.xml 配置文件时出现了错误。可能是配置文件存在语法错误或者格式不正确导致的。建议检查一下配置文件的内容,确保语法正确、标签闭合等问题。如果还是无法解决,可以尝试重新生成一个新的配置文件。 ### 回答2: 在Hadoop分布式系统,yarn-site.xml是Hadoop集群的配置文件之一,用于配置YARN(Yet Another Resource Negotiator)资源管理器的参数。当系统在加载yarn-site.xml文件时,如果遇到错误,就会输出“error conf.configuration: error parsing conf yarn-site.xml”错误信息。通常情况下,这种情况是由以下原因引起的。 1. 错误的XML格式 yarn-site.xml文件是一个XML格式的文件,如果文件格式出错,系统就无法正确地解析配置信息。常见的错误包括标签未正确闭合、缺少引号、不规范的命名结构等。 2. 配置信息错误 yarn-site.xml文件配置参数时,如果某个参数格式错误,或者与其它参数存在冲突,也会出现“error parsing conf yarn-site.xml”错误信息。这可能是由于复制粘贴错误、参数名称错误、参数值错误等问题导致的。 3. 权限问题 当系统访问yarn-site.xml文件时,如果权限不足,则会出现“error parsing conf yarn-site.xml”错误信息。这种情况可能是由于文件所有者或权限设置不正确导致的。 针对这些问题,我们可以通过以下方式解决: 1. 检查yarn-site.xml文件的XML格式,并根据需要进行修改。 2. 检查yarn-site.xml文件的配置参数,并确保格式正确、参数名称正确、参数所在位置正确等。 3. 检查yarn-site.xml文件的权限,并确保文件所有者、权限设置正确。 总之,处理error conf.configuration: error parsing conf yarn-site.xml报错信息的关键是找到出错的原因并针对性地解决。对于Hadoop初学者来说,更加建议在配置Hadoop集群时,仔细检查yarn-site.xml配置文件,并结合Hadoop官方文档进行配置。 ### 回答3: 错误解释: 该错误信息表明,Hadoop文件系统处理程序(YARN)在处理yarn-site.xml配置文件时遇到了语法解析错误。 这可能是由于yarn-site.xml文件的某些语法错误引起的。 解决方案: 以下是一个简单的步骤,可以帮助您在遇到此错误时解决问题: 步骤1:检查配置文件 首先,请检查yarn-site.xml文件是否存在于您的Hadoop集群的正确位置。 然后,请确保该文件没有任何语法错误。 您可以使用XML解析器来检查文件是否存在语法错误。 如果找到错误,您可以手动更正它们或使用Hadoop的配置编辑器来更正它们。 步骤2:检查文件权限 确保yarn-site.xml文件的所有权和权限设置正确。 要这样做,请使用以下命令检查文件权限: $ ls -l /etc/hadoop/conf | grep yarn-site.xml 如果发现所有权或权限设置不正确,请使用以下命令更改它们: $ chown hadoop yarn-site.xml $ chmod 644 yarn-site.xml 步骤3:重启YARN 启动或重启YARN服务后,检查错误是否已解决。 您可以使用以下命令启动YARN服务: $ start-yarn.sh 如果上述步骤都无法解决此错误,则可能需要重新安装Hadoop并重新配置其环境。 这种情况下,您可以考虑寻求专业技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值