springboot启动方式

2021-07-14  本文已影响0人  Depro

两种

1.jar包方式

2.war包方式


jar包

1. Application.java中main方法SpringApplication.run(Application.class,args);

2.java -jar application.jar

3.以spring内嵌的tomcat启动,这种方式需要一个jar

<groupId>org.apache.tomcat.embed</groupId>

<artifactId>tomcat-embed-core</artifactId>

<version>8.5.31</version> 


war包

1.Application.java extends SpringBootServletInitializer

2.重写configure方法,builder.sources(Application.class)

3.这是以外部tomcat启动的

原理: 

SpringBootServletInitializer实现了WebApplicationInitializer,这个WebApplicationInitialzer是spring-web.jar的类;

通过spi实现了Serlvet3.0规范,在spring-web.jar/META-INF/services/javax.servlet.ServletContainerInitilizer文件里,加载了SpringServletContainerInitializer

这个SpringServletContainerInitializer implements ServletContainerInitializer

ServletContainerInitializer是在servlet-api.jar中,是一个servlet3.0规范的接口,tomcat启动会加载这个接口的实现。所以也就会加载SpringServletContainerInitializer

在SpringServletContainerInitializer中通过serlvet-api.jar的注解@HandlerTypes(WebApplicationInitializer.class),在onStartup()方法中把实现了WebApplicationInitializer的类放到参数集合Set<Class<?>> webAppInitializerClasses中,这个集合中就有前面的SpringBootServletInitializer

上一篇 下一篇

猜你喜欢

热点阅读