1、在SpringBoot中默认支持Tomcat容器,所以当一个SpringBoot项目打包生成*.jar文件,并且直接执行的时候就会自动启动内部的Tomcat容器。除了此种模式之外,也可以将Web项目打包为*.war文件,采用部署的形式通过Tomcat进行发布处理,这种方式和传统模式比较类似,打成war包丢到tomcat里面进行运行。
2、在将SpringBoot打包为*.war文件的时候,如果想正常部署一定要注意以下两点:
第一点:是取消项目中的Jetty容器的配置。
第二点:是将所有的源文件夹目录设置输出资源,修改父pom.xml中的<resource>配置。千万注意,创建WEB-INF/web.xml配置文件,不然会提示报错的哦。
3、开始修改pom.xml配置文件,将程序的打包类型定义为*.war,修改pom.xml配置文件,追加war文件打包插件。
1 <?xml version="1.0"?> 2 <project 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/xsd/maven-4.0.0.xsd" 5 xmlns="http://maven.apache.org/POM/4.0.0" 6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 7 <modelVersion>4.0.0</modelVersion> 8 9 <parent> 10 <groupId>com.bie</groupId> 11 <artifactId>springboot-base</artifactId> 12 <version>0.0.1-SNAPSHOT</version> 13 </parent> 14 15 <!-- 父项目已经指定,这里可以省略 --> 16 <!-- <groupId>com.bie</groupId> --> 17 <artifactId>springboot-tentent</artifactId> 18 <!-- <version>0.0.1-SNAPSHOT</version> --> 19 <name>springboot-tentent</name> 20 <url>http://maven.apache.org</url> 21 <!-- 将Springboot项目打包成war包的形式 --> 22 <packaging>war</packaging> 23 24 <properties> 25 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-web</artifactId> 32 </dependency> 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-test</artifactId> 36 <scope>test</scope> 37 </dependency> 38 <dependency> 39 <groupId>junit</groupId> 40 <artifactId>junit</artifactId> 41 <scope>test</scope> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-starter-jetty</artifactId> 46 </dependency> 47 </dependencies> 48 49 <build> 50 <plugins> 51 <!-- 该插件的主要功能是进行项目的打包发布处理 --> 52 <plugin> 53 <groupId>org.springframework.boot</groupId> 54 <artifactId>spring-boot-maven-plugin</artifactId> 55 <!-- 设置程序执行的主类 --> 56 <configuration> 57 <mainClass>org.springboot.tentent.Springboot01Application</mainClass> 58 </configuration> 59 <executions> 60 <execution> 61 <goals> 62 <goal>repackage</goal> 63 </goals> 64 </execution> 65 </executions> 66 </plugin> 67 <plugin> 68 <groupId>org.apache.maven.plugins</groupId> 69 <artifactId>maven-war-plugin</artifactId> 70 <configuration> 71 <!-- 打包后的war文件名称 --> 72 <warName>springboot-tentent</warName> 73 </configuration> 74 </plugin> 75 </plugins> 76 <resources> 77 <resource> 78 <directory>src/main/resources</directory> 79 <includes> 80 <include>**/*.properties</include> 81 <include>**/*.yml</include> 82 <include>**/*.xml</include> 83 <include>**/*.tld</include> 84 </includes> 85 <filtering>false</filtering> 86 </resource> 87 <resource> 88 <directory>src/main/java</directory> 89 <includes> 90 <include>**/*.properties</include> 91 <include>**/*.xml</include> 92 <include>**/*.tld</include> 93 </includes> 94 <filtering>false</filtering> 95 </resource> 96 </resources> 97 </build> 98 99 100 </project>
修改完pom.xml文件之后,更新项目会报错提示缺少web.xml配置文件,此时创建一个web.xml配置文件即可。
如果现在项目要以Tomcat的形式运行,那么需要修改SpringBoot程序启动类定义,该类必须要继承SpringBootServletInitializer父类,同时还需要覆写configure()方法。
1 package org.springboot.tentent; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.boot.builder.SpringApplicationBuilder; 6 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 7 8 @SpringBootApplication // 启动Springboot程序,自带子包扫描 9 public class Springboot01Application extends SpringBootServletInitializer { 10 11 @Override 12 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 13 // 配置Springboot的应用环境 14 SpringApplicationBuilder sources = builder.sources(Springboot01Application.class); 15 return sources; 16 } 17 18 public static void main(String[] args) { 19 SpringApplication.run(Springboot01Application.class, args); 20 } 21 22 }
对项目进行打包部署(clean package),成功之后会在target目录中形成xxx.war程序文件,随后可以将此文件直接复制到Tomcat所在目录之中,而后启动Tomcat进行项目发布。
生成的xxx.war包在target目录下面,由于我的使用的maven创建父子工程,所以生成了两个,如下所示:
此时可以将此文件直接复制到Tomcat所在目录(apache-tomcat-8.5.34webapps)之中,而后启动Tomcat进行项目发布。