前提
有一个SpringBoot项目 点我查看
下载第一版、导入Intellij IDEA、启动类鼠标右键运行(就像运行一个普通的Java程序)
验证:http://localhost:8888/hello
改造
1.启动类(比较方便)继承SpringBootServletInitializer
extends SpringBootServletInitializer
2.重写configure方法
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(BootOnTomcat01Application.class);
}
3.在pom.xml中将打包方式改为war
<packaging>war</packaging>
4.排除内嵌的Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除SpringBoot自带的Tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
5.引入内嵌的Tomcat,并添加scope为provided
<!--
引入tomcat(为了该项目依旧可以作为SpringBoot单独启动)
但是添加<scope>provided</scope>(打包时不会包含进去,从而避免部署到外部Tomcat时与外部的Tomcat冲突)
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
6.配置Tomcat
6.1 添加Tomcat
6.2 给TomcatServer起名字,注意此时TomcatServer的端口号为8080
6.3 添加Artifact
6.4 选择Artifacts
6.5 配置Application Context
6.6 点击绿色三角形,运行TomcatServer
验证:http://localhost:8080/boot_on_tomcat_01_war/hello
区别:
1.端口号变成了TomcatServer的端口号
2.应用上下文路径多了一级boot_on_tomcat_01_war(默认是war包的名字)
总结
经过以上改造,该工程既可以①单独启动,也可以②部署到外部的Tomcat上了。
注意①②两种方式启动后访问的端口和上下文路径的区别
代码区别
https://gitee.com/lanying100/boot-on-tomcat/commit/e8b94d7a64523d71dad530b72416ad29fb22b1c8