Tomcat部署SrpringBoot项目注意事项
POM文件
打包时需排除个别tomcat的lib中已经存在的jar包,修改pom.xml以下内容
<!--项目打war包 默认不写会打jar包-->
<packaging>war</packaging>
<!--打包时跳过 test文件夹-->
<properties>
<skipTests>true</skipTests>
</properties>
<!--打包排除 tomcat依赖-->
<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>
<!--添加servlet-api依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--打包时该依赖不会被打包进去-->
<scope>provided</scope>
</dependency>
<!--添加tomcat依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包时该依赖不会被打包进去-->
<scope>provided</scope>
</dependency>
启动类Application
由于SpringBoot项目是没有web.xml文件的,如果你打成war丢到tomcat上启动你会发现没有如何反应,因为tomcat并没有找到web.xml来初始化容器,SpringBootServletInitializer类就一个web.xml的替代品,用法也很简单,只需要在你的启动类中继承他,并且重写configure方法即可
注意: 使用war启动项目就必须继承SpringBootServletInitializer重写configure方法否则项目部署不了
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
打包
idea 打包很方便,点击右侧的maven,双击package,maven就会帮你把包打到target目录下面,默认是打jar包,只有pom配置 packaging 方式是war包才会 大war包