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

Spring非Boot+Vaadin项目迁移至Tomcat10部署异常求助

Spring非Boot项目迁移Tomcat10 + Vaadin24问题排查方案

一、VaadinContext中Lookup实例缺失的IllegalStateException

  • 确保vaadin-spring与Vaadin核心版本(24.3.3)完全匹配,版本不一致会导致上下文初始化逻辑冲突。
  • 处理Vaadin8兼容性包冲突:vaadin-compatibility-server:8.23.0和Vaadin24的上下文机制不兼容,优先逐步替换代码中Vaadin8的API为Vaadin24替代方案;若暂时无法替换,需在web.xml中排除Vaadin24的自动监听器,手动配置兼容性上下文。
  • 适配Tomcat10的Jakarta Servlet API:Tomcat10使用jakarta.servlet.*包,而Vaadin8依赖旧版javax.servlet.*,需确认兼容性包已适配Jakarta,或添加Tomcat的javax.servlet桥接包过渡。

二、Spring JMX UnableToRegisterMBeanException

  • 检查Tomcat10的JMX配置:在conf/catalina.properties中确认com.sun.management.jmxremote相关配置已启用,且端口未被占用。
  • 调整Spring MBean注册策略:在Spring配置类添加@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING),避免重复注册已存在的MBean。
  • 排查MBean命名冲突:检查自定义MBean的ObjectName是否与Tomcat内置MBean重名,修改冲突的命名前缀。

三、内存泄漏警告(JDBC驱动/线程未停止)

  • 修复JDBC驱动注销:在Spring的DataSource销毁方法中显式调用DriverManager.deregisterDriver(),或改用Tomcat内置JNDI数据源,由容器统一管理生命周期。
  • 清理残留线程:排查自定义线程池、定时任务,确保在Spring上下文销毁时调用shutdown();生产环境禁用Vaadin DevMode,移除DevModeStartupListener相关配置。

四、监听器启动失败排查

  • 查看Tomcat详细日志:在logs/localhost.log或logs/catalina.out中定位监听器失败的具体堆栈,确认是Vaadin Spring监听器还是自定义Spring监听器出问题。
  • 校验web.xml配置:确保所有监听器类路径正确,Tomcat10下需使用jakarta.servlet包下的监听器类(替换旧版javax.servlet相关引用)。
  • 分析依赖冲突:执行mvn dependency:tree命令排查依赖树,排除重复或冲突的Spring、Vaadin依赖,重点解决javax.servlet与jakarta.servlet的混合依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:00:58