1.war包与jar包的区别
1、jar包不包含wabapp目录,jar包主要使用在通用功能,不包含webapp目录,打的jar包可以直接放在其他项目的lib使用,使用内部tomcat启动。启动流程:执行SpringBootApplication的run方法,启动IOC容器,然后创建嵌入式Servlet容器;
2、war包方式,包含webapp目录,打包时包含webapp目录,使用外部容器进行启动。启动流程:先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动IOC容器。
2.打成war包
<packaging>war</packaging>
<!-- 移除内置tomcat,打成war包时使用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- provided表示只在编译和测试期间有效-->
<scope>provided</scope>
</dependency>
外部容器启动必须让springboot主程序继承SpringBootServletInitializer,并重写configure()方法。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
另一种移除tomcat方式配置:
<!-- web应用依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<!-- 排除内置tomcat-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加servlet-api的依赖,用来打war包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
2.打Jar包