springboot启动方式
两种
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