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

Vaadin应用部署至Tomcat启动失败问题求助

问题分析与解决方法

第一个异常:NoSuchMethodError(WebApplicationContextUtils.getWebApplicationContext)

原因

  • Vaadin 23.3.6依赖的Spring版本和你项目/Tomcat容器里的Spring版本不兼容,WebApplicationContextUtils.getWebApplicationContext方法在高版本Spring中可能被移除或签名变更,Vaadin调用时找不到该方法。
  • Tomcat 9.0.72官方仅支持Java 8到17,你使用的Java 18属于非官方支持版本,容易引发类加载或方法匹配的隐性问题。

解决方法

  • 统一Spring版本:Vaadin 23.3.x适配Spring Boot 2.7.x,已降级到2.7.3的前提下,要确保所有Spring相关依赖都使用该版本,比如通过Maven的dependencyManagement或Gradle的平台插件强制统一版本,避免依赖冲突。
  • 降级Java到17:切换为Tomcat官方支持的Java 17 LTS版本,消除JDK版本不兼容带来的问题。
  • 清理容器冲突依赖:检查Tomcat/lib目录,若存在Spring相关Jar包直接删除,防止和WAR包内的Spring依赖版本冲突(项目WAR应自带所需Spring依赖,除非是容器统一提供的依赖)。

第二个异常:Spring自动实例化DataSource失败(无合适驱动类)

原因

Spring Boot自动配置机制默认开启DataSourceAutoConfiguration,哪怕你不使用DataSource,只要classpath中存在JDBC相关依赖(比如Tomcat/lib里的MySQL驱动),Spring就会自动尝试配置数据源,但你未配置数据库连接参数,因此报错找不到合适驱动。

解决方法

  • 禁用数据源自动配置:在Spring Boot启动类上添加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}),直接关闭Spring的数据源自动配置逻辑。
  • 清理项目JDBC依赖:检查项目的pom.xml或build.gradle,移除spring-boot-starter-jdbc、spring-boot-starter-data-jpa这类未使用的JDBC相关依赖。
  • 调整Tomcat驱动存放:如果项目完全不用数据源,就把Tomcat/lib里的MySQL驱动移走;要是其他应用需要保留该驱动,就必须采用第一种方法禁用自动配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:25:11