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> - 正确声明
providedscope的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前端资源目录。 - 部署前清空Tomcat
webapps目录下的旧应用文件夹,避免残留文件冲突,再放入新War包启动Tomcat。
额外排查点
若以上步骤无效,检查以下内容:
- 查看日志中是否有前置异常(如Spring上下文初始化失败),这是导致Vaadin
Lookup实例缺失的常见间接原因。 - 确认无自定义Vaadin配置类(如
@VaadinServletConfiguration)干扰默认初始化流程。 - 验证Vaadin 23.3.6与Spring Boot 2.7.8的兼容性(二者官方兼容,此点可排除)。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

