首页 > 解决方案 > 从源码讨论SpringApplication的run方法是否会执行两次

问题描述

看了下springboot的源码,感觉SpringApplication的run方法会执行两次。第一次,当你执行下面的代码

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

第二次,Servlet3.0在指定web容器启动的时候会去实现类中回调ServletContainerInitializer的onStartup方法,并通过@HandlesTypes进入对应的实现类,最后在调用SpringBootServletInitializer的onStartup方法,这个方法调用createRootApplicationContext方法,下面代码中的CreateRootApplicationContext方法

protected WebApplicationContext createRootApplicationContext(ServletContext servletContext) {
    // Omit other code
    return run(application);
}

再次执行 SpringApplication 的 run 方法。为什么要执行这个方法两次?

标签: spring-boot

解决方案


它没有被调用两次。main 方法仅在作为独立应用程序运行时使用。调用 viaSpringBootServletInitializer仅在部署到 servlet 容器时使用。


推荐阅读