SpringBoot默认达成jar包,使用SpringBoot构想web应用,默认使用内置的Tomcat。但考虑到项目需要集群部署或者进行优化时,就需要打成war包部署到外部的Tomcat服务器中。 本文所使用Spring
SpringBoot默认达成jar包,使用SpringBoot构想web应用,默认使用内置的Tomcat。但考虑到项目需要集群部署或者进行优化时,就需要打成war包部署到外部的Tomcat服务器中。
本文所使用SpringBoot版本为:<version>2.1.2.RELEASE</version>
一、修改pom.xml文件将默认的jar方式改为war:
<groupId>com.example</groupId> <artifactId>application</artifactId> <version>0.0.1-SNAPSHOT</version> <!--默认为jar方式--> <!--<packaging>jar</packaging>--> <!--改为war方式--> <packaging>war</packaging>二、排除内置的Tomcat容器(两种方式都可):
- 1、排除spring-boot-starter-web中的Tomcat
- 2、添加依赖
- 3、添加servlet-api的依赖
三、继承org.springframework.boot.web.servlet.support.SpringBootServletInitializer,实现configure方法:
为什么继承该类,SpringBootServletInitializer源码注释:
Note that a WebApplicationInitializer is only needed if you are building a war file and deploying it. If you prefer to run an embedded web server then you won't need this at all.注意,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer。
如果你喜欢运行一个嵌入式Web服务器,那么你根本不需要这个。
启动类代码:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }- 1、方式一,启动类继承SpringBootServletInitializer实现configure:
- 2、方式二,新增加一个类继承SpringBootServletInitializer实现configure:
注意事项: 使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的
server.port= server.servlet.context-path=将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。
为了防止应用上下文所导致的项目访问资源加载不到的问题,
建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签:
<build> <!-- 应与application.properties(或application.yml)中context-path保持一致 --> <finalName>war包名称</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>使用mvn命令行打包,运行:
clean是清除之前的包,-Dmaven.test.skip=true是忽略测试代码
jar 方式打包,使用内置Tomcat:mvn clean install -Dmaven.test.skip=true
运行:java -jar 包名.jar
war方式打包,使用外置Tomcat:mvn clean package -Dmaven.test.skip=true
运行:${Tomcat_home}/bin/目录下执行startup.bat(windows)或者startup.sh(linux)