在JBOSS中运行Spring应用时找不到rabbit命名空间的Spring NamespaceHandler
问题解决方案
- 补全spring-rabbit依赖
负责解析rabbit命名空间的NamespaceHandler实际在spring-rabbit包中,你当前仅引入了spring-amqp和spring-integration-amqp,缺少核心依赖,需新增对应配置:
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.5.3.RELEASE</version> </dependency>
校验版本兼容性
你配置中使用的是Spring 2.5版本的xsd,需确认核心Spring版本与spring-rabbit版本匹配:spring-rabbit 1.5.x版本最低要求Spring 3.2.x,若你实际使用Spring 2.5,需将spring-rabbit版本降低到1.0.x及以下兼容版本。配置JBoss类加载隔离
JBoss默认优先加载服务器自带的Spring相关依赖,会覆盖应用内部引入的spring-rabbit包,导致找不到NamespaceHandler。需在WEB-INF下新增jboss-deployment-structure.xml配置,开启应用优先加载自身依赖:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <exclusions> <module name="org.springframework" /> </exclusions> <dependencies> <module name="javax.api" /> <module name="javax.servlet.api" /> </dependencies> </deployment> </jboss-deployment-structure>
- 修复打包配置遗漏
如果使用maven-shade-plugin打包,默认会覆盖多个依赖包中META-INF下的spring.handlers、spring.schemas文件,需要添加资源合并配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者mohammed talhi
相关产品推荐
相关产品推荐

