Spring Boot 2.0.2部署Wildfly 10/11/12遇@Resource注解未指定名称错误
解决Spring Boot 2.0.2部署到WildFly 10/11/12的@Resource注解报错问题
嘿,看你贴的错误栈,问题根源很明确啦:WildFly的EE组件要求所有@Resource注解必须显式指定name属性,不管是你自己代码里的,还是Spring Boot依赖库中的类,只要有没加name的@Resource,部署到这几个版本的WildFly就会在POST_MODULE阶段卡壳。
给你几个实用的解决办法,按需选就行:
1. 检查并修复自己代码里的@Resource
先扫一遍你项目里所有用@Resource的地方,把没加name的补上就行,比如:
// 之前的错误写法 @Resource private DataSource dataSource; // 修改后正确的写法 @Resource(name = "dataSource") private DataSource dataSource;
2. 让WildFly放宽@Resource的检查规则
如果是依赖库中的类带了无name的@Resource(总不能改人家源码吧),可以给WildFly加个配置或者启动参数来绕开这个检查:
- 临时方案(启动时加参数):启动WildFly的时候,在启动命令后面加这个参数:
./standalone.sh -Dorg.jboss.as.ee.allow-unresolved-resource-refs=true - 永久方案(修改配置文件):找到WildFly安装目录下的
standalone/configuration/standalone.xml,找到<subsystem xmlns="urn:jboss:domain:ee:x.x">节点(x.x是版本号,比如WildFly10是3.0),添加或修改这段配置:<subsystem xmlns="urn:jboss:domain:ee:3.0"> <!-- 其他已有配置保留 --> <resource-injection> <allow-unresolved-resource-refs>true</allow-unresolved-resource-refs> </resource-injection> </subsystem>
3. 调整Spring Boot的WAR包打包配置
Spring Boot默认打可执行JAR,部署到WildFly最好用标准WAR包,还要正确排除嵌入式容器,避免冲突:
- 先把
pom.xml里的打包方式改成war:<packaging>war</packaging> - 排除Spring Boot自带的Tomcat,添加Servlet API依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> - 让启动类继承
SpringBootServletInitializer:@SpringBootApplication public class SmartCallApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SmartCallApplication.class); } public static void main(String[] args) { SpringApplication.run(SmartCallApplication.class, args); } }
最后提个小建议:WildFly 10/11/12都是比较老的版本了,Spring Boot 2.0.2和新版本WildFly(比如14+)的兼容性会更好,如果有条件升级WildFly,能少踩不少这类兼容性坑~
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

