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

Spring Boot 3.2.0-M3集成Vaadin Flow启动抛BeanCreationException求助

问题

测试Spring Boot v3.2(-M3)环境下的Vaadin Flow时,启动过程抛出BeanCreationException异常,该场景在Spring Boot v3.1中可正常运行,请问是否需要调整启动配置?

异常堆栈跟踪信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'vaadinApplicationContextInitializer' defined in class path resource [com/vaadin/flow/spring/VaadinApplicationConfiguration.class]: The underlying ServletContext of VaadinServletContext is null and there is no VaadinServletService to obtain it from.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:939) ~[spring-context-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) ~[spring-context-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.0-M3.jar:3.2.0-M3]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-3.2.0-M3.jar:3.2.0-M3]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) [spring-boot-3.2.0-M3.jar:3.2.0-M3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-3.2.0-M3.jar:3.2.0-M3]
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:149) [spring-boot-3.2.0-M3.jar:3.2.0-M3]
    at it.xxx.xxx.Application.main(Application.java:57) [main/:?]
Caused by: java.lang.IllegalStateException: The underlying ServletContext of VaadinServletContext is null and there is no VaadinServletService to obtain it from.
    at com.vaadin.flow.server.VaadinServletContext.ensureServletContext(VaadinServletContext.java:62) ~[flow-server-24.2.0.beta2.jar:24.2.0.beta2]
    at com.vaadin.flow.server.VaadinServletContext.getAttribute(VaadinServletContext.java:69) ~[flow-server-24.2.0.beta2.jar:24.2.0.beta2]
    at com.vaadin.flow.server.VaadinContext.getAttribute(VaadinContext.java:58) ~[flow-server-24.2.0.beta2.jar:24.2.0.beta2]
    at com.vaadin.flow.spring.SpringLookupInitializer$SpringApplicationContextInit.setApplicationContext(SpringLookupInitializer.java:161) ~[vaadin-spring-24.2.0.beta2.jar:?]
    at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:112) ~[spring-context-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:87) ~[spring-context-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:421) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1767) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-6.1.0-M5.jar:6.1.0-M5]
    ... 14 more
解决方案

这个问题是Spring Boot 3.2的Servlet上下文初始化时机调整,与Vaadin 24.2 beta版本不兼容导致的,可通过以下方式解决:

  • 优先升级Vaadin版本:直接升级到Vaadin 24.2正式版或24.2.0.beta3及以上的beta版本,官方已修复Spring Boot 3.2的适配问题。
  • 临时调整启动配置(无法升级时):
    1. 添加JVM启动参数,跳过Vaadin的自动初始化:
      -Dvaadin.spring.context.initializer.ignore=true
      
    2. 或者自定义配置类,手动控制Vaadin Servlet的初始化时机:
      @Configuration
      public class VaadinServletConfig {
          @Bean
          public ServletRegistrationBean<VaadinServlet> vaadinServlet() {
              VaadinServlet servlet = new VaadinServlet();
              ServletRegistrationBean<VaadinServlet> registration = new ServletRegistrationBean<>(servlet, "/*");
              registration.setLoadOnStartup(1);
              return registration;
          }
      }
      
  • 检查自动配置状态:确保未禁用Spring Boot的Servlet自动配置,避免ServletContext无法正常初始化。

原因说明

Spring Boot 3.2对WebApplicationContext的初始化流程做了调整,ServletContext的创建时机比3.1版本更晚,而旧版Vaadin的vaadinApplicationContextInitializer在初始化时依赖已就绪的ServletContext,因此触发了空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:28:12