Java 为什么spring引导应用程序的主方法已经返回,但应用程序仍然可以接受请求?

Java 为什么spring引导应用程序的主方法已经返回,但应用程序仍然可以接受请求?,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,当我在Intellij IDEA中调试spring启动应用程序时,我发现spring应用程序的主要方法将返回。当主方法返回表示流程已完成时,spring boot应用程序如何仍能接受请求?当您将web starter作为应用程序的依赖项时,spring boot知道它必须启动嵌入式servlet容器(web服务器),除非您: org.springframework.boot 另请参见: 当您将web starter作为应用程序的依赖项时,Spring Boot知道它必须启动嵌入式ser

当我在Intellij IDEA中调试spring启动应用程序时,我发现spring应用程序的主要方法将返回。当主方法返回表示流程已完成时,spring boot应用程序如何仍能接受请求?

当您将
web starter
作为应用程序的依赖项时,spring boot知道它必须启动嵌入式servlet容器(web服务器),除非您:


org.springframework.boot


另请参见:


当您将
web starter
作为应用程序的依赖项时,Spring Boot知道它必须启动嵌入式servlet容器(web服务器),除非您:


org.springframework.boot


另请参见:


可能是因为它启动了一些使JVM保持活动状态的后台线程…?@ErnestKiwele您知道应用程序从何处启动这些后台线程吗?当您启动应用程序时,web服务器/容器将在spring boot启动。容器有线程池和许多机制来保持应用程序运行,确切地说是等待传入的请求。。。您需要在文档中找到如何停止spring boot应用程序。@ErnestKiwele我只是想知道spring boot应用程序是如何工作的,因为在其他web框架中,例如Flask、NodeJs Express,当我们运行app.run()时,应用程序将阻止接受请求,这很容易理解,因为three是侦听和接受连接的事件循环或侦听器,所以应用程序可以工作,spring boot应用程序似乎永远不会阻止侦听和接受连接。可能是因为它启动了一些使JVM保持活动状态的后台线程…?@ErnestKiwele您知道应用程序从何处启动这些后台线程吗?启动应用程序时,web服务器/容器由spring boot启动。容器有线程池和许多机制来保持应用程序运行,确切地说是等待传入的请求。。。您需要在文档中找到如何停止spring boot应用程序。@ErnestKiwele我只是想知道spring boot应用程序是如何工作的,因为在其他web框架中,例如Flask、NodeJs Express,当我们运行app.run()时,应用程序将阻止接受请求,这很容易理解,因为three是侦听和接受连接的事件循环或侦听器,所以应用程序可以工作。但是,spring boot应用程序似乎永远不会阻止侦听和接受连接。因此我猜spring boot只是异步启动tomcat服务器并将资源复制到服务器的工作目录,那么服务器就可以用这些资源处理请求了,对吗?是的,我不确定它是否复制了这些资源,或者只是配置tomcat,让它用它的资源指向一个外部工作目录,但这就是它的工作方式。非常感谢,你把我从混乱中解救了出来。所以我想spring引导只是异步启动一个tomcat服务器并将资源复制到服务器的工作目录,然后服务器就可以用这些资源处理请求了,对吗?是的,我不确定它是否复制了资源,或者只是将tomcat配置为使用其资源将其指向外部工作目录,但这就是它的工作原理。非常感谢,您让我免于困惑。
@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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