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

Vaadin23+SpringBoot2.7.8 war包部署Tomcat9启动失败求助

问题解决:Vaadin 23 + Spring Boot 2.7.x War包部署Tomcat 9报错Lookup实例缺失

核心解决方案步骤

1. 修正主类继承SpringBootServletInitializer

这是Spring Boot War包部署的核心要求,必须让应用主类继承该类并实现configure方法,否则Tomcat无法正确初始化Spring上下文,进而导致Vaadin无法获取Lookup实例:

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

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

2. 检查并修正pom.xml关键配置

确保以下配置准确无误,避免依赖冲突或资源缺失:

  • 打包方式设置:
    <packaging>war</packaging>
    
  • 正确声明provided scope的Tomcat依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  • 生产环境Profile配置(确保前端资源被正确打包):
    <profile>
        <id>production</id>
        <properties>
            <vaadin.productionMode>true</vaadin.productionMode>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-production-mode</artifactId>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-maven-plugin</artifactId>
                    <version>23.3.6</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-frontend</goal>
                            </goals>
                            <phase>compile</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    
  • 移除额外添加的spring-boot-starter-web依赖:Vaadin Starter已包含该依赖,重复添加会导致冲突。

3. 配置Tomcat 9与Java 17的兼容性

Tomcat 9.0.68支持Java 17,但需在CATALINA_OPTS中添加模块化访问参数:

CATALINA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED"

4. 规范打包与部署流程

  • 执行打包命令:mvn clean package -Pproduction,确保过程无报错,检查target目录下的War包是否包含WEB-INF/classes、WEB-INF/lib及VAADIN前端资源目录。
  • 部署前清空Tomcatwebapps目录下的旧应用文件夹,避免残留文件冲突,再放入新War包启动Tomcat。

额外排查点

若以上步骤无效,检查以下内容:

  • 查看日志中是否有前置异常(如Spring上下文初始化失败),这是导致VaadinLookup实例缺失的常见间接原因。
  • 确认无自定义Vaadin配置类(如@VaadinServletConfiguration)干扰默认初始化流程。
  • 验证Vaadin 23.3.6与Spring Boot 2.7.8的兼容性(二者官方兼容,此点可排除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:15:24