1.父模块pom文件排除spring-boot-starter-web中的Tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 移除嵌入式tomcat插件 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
2.父模块pom文件添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>

3.子模块foodie-dev-api(含springboot启动类入口的模块) pom文件中增加打包方式
<packaging>war</packaging>
4.子模块foodie-dev-api pom文件配置
<build><!-- war包打包名称 --><finalName>foodie</finalName><plugins><plugin><!-- The plugin rewrites your manifest --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 指定该Main Class为全局的唯一入口 --><mainClass>com.imooc.Application</mainClass></configuration></plugin></plugins>
</build>

5.子模块foodie-dev-api的启动类Application继承SpringBootServletInitializer实现configure
public class Application extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(Application.class);}public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

6.打包成war
maven:clean -> install,在foodie-dev-api模块会生成target目录,旗下存在foodie.war

注意事项:
使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的
server.port=
server.servlet.context-path=
将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。
参考:
sprongboot多模块打war包部署tomcat