You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.0.3部署WildFly 25.0.1后REST服务无法访问求助

解决Spring Boot 3.0.3部署到WildFly 25.0.1的REST服务异常问题

核心兼容性问题

Spring Boot 3.0.x基于Jakarta EE 9(所有javax.*包已替换为jakarta.*),但WildFly 25.0.1仅支持Jakarta EE 8,这是导致部署后异常的根本原因。由于你必须使用WildFly 25,唯一可行的兼容方案是降级Spring Boot到支持Jakarta EE 8的版本(2.7.x系列,这是Spring Boot最后支持Jakarta EE 8的分支)。

具体配置调整步骤

1. 调整POM依赖

  • 降级Spring Boot版本至2.7.x(例如2.7.12)
  • 排除Spring Boot自带的Tomcat依赖,避免与WildFly的内置容器冲突
  • 配置Maven打包为WAR格式,适配WildFly部署

示例POM关键配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.12</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 排除内置Tomcat -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 添加Servlet API依赖,仅编译时有效 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- 配置WAR打包,允许无web.xml -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 修改Spring Boot主类

让主类继承SpringBootServletInitializer,确保Servlet容器(WildFly)能正确启动Spring应用:

@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

3. 检查jboss-web.xml配置

确保context-root配置正确,避免访问路径冲突:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <!-- 配置应用访问根路径,例如设为/your-app -->
    <context-root>/your-app</context-root>
    <!-- 若存在类加载冲突,可添加类加载隔离配置 -->
    <class-loading>
        <loader-repository>
            com.yourcompany:archive=your-app.war
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
    </class-loading>
</jboss-web>

4. 部署后排查要点

  • 查看WildFly的standalone/log/server.log,定位具体异常栈(比如NoClassDefFoundError、BeanCreationException)
  • 访问REST接口时需加上context-root前缀:例如原Tomcat访问http://localhost:8080/api/test,WildFly需访问http://localhost:8080/your-app/api/test
  • 检查WildFly的数据源、JPA配置,避免与Spring Boot的application.properties冲突
  • 确保WildFly已启动,端口未被占用(默认8080)

内容的提问来源于stack exchange,提问作者jasmine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:20:36