字节二面:为什么SpringBoot的 jar 可以直接运行?我说因为内嵌了Tomcat容器,他让我出门左转。。
Spring Boot的jar可以直接运行是因为它内嵌了Tomcat、Jetty或Undertow等Servlet容器,这样可以让开发者不需要单独部署WAR文件,而是打包成一个独立的jar文件,通过java -jar命令即可启动Web应用。
当你运行java -jar your-spring-boot-app.jar
时,Spring Boot的内嵌服务器会启动,并且根据配置处理进入的HTTP请求。
具体来说,Spring Boot使用Spring Web项目中的SpringBootServletInitializer
类来处理内嵌容器的启动逻辑。如果你查看Spring Boot的主类,通常会有如下的配置:
@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
SpringBootServletInitializer
类扩展了ServletContainerInitializer
,它在内嵌的Servlet容器启动时会被调用,进而Spring Boot的内部机制会确保应用以Servlet的形式正确启动。
如果你想要进一步了解内嵌容器的启动过程,可以查看Spring Boot的源码,特别是SpringBootWebServer
和WebServer
的实现类,如TomcatWebServer
、JettyWebServer
和UndertowWebServer
。
评论已关闭