打包

HeJin大约 1 分钟Spring全家桶SpringBoot精讲细讲

jar包

SpringBoot默认的打包方式。

在IDEA中,点击package即可在项目编译之后的target目录下生成jar文件。

image-20210510204738225
image-20210510204738225

jar -jar jar包名称 参数即可运行jar包。

war包

porm文件修改

<packaging>war</packaging>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
scope取值有效范围(compile, runtime, test)依赖传递例子
compileallspring-core
providedcompile, testservlet-api
runtimeruntime, testJDBC驱动
testtestJUnit
systemcompile, test

main方法

如果以war包的方式打包,SpringBoot的main方法就没用了。这时候程序的入口就是Tomcat。这时候我们必须要写一个类注入到容器中,这个类要把SpringBoot的主启动类传入

@Component
public class ServletInitializer extends SpringBootServletInitializer {
    /**
     * Springboot01Application 主启动类 Springboot
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Springboot01Application.class);
    }
}

这时候就是由Tomcat加载ApplicationContext。SpringBootServletInitializer就相当于之前的web.xml文件。

在IDEA中直接打包

image-20210511101209082
image-20210511101209082

Tomcat启动干了什么

https://www.bilibili.com/video/BV1JU4y1p75q?p=19open in new window

  • ServletContainerInitializer接口的实现类
  • file META-INF/services/javax.servlet.ServletContainerInitializer (spi机制)。调用onStartup方法。
image-20210511104038760
image-20210511104038760
  • servletContext 配置过滤器、servlet、filter、listener