Spring Boot 项目用外部Tomcat部署实践

一. 新建spring boot工程

1. 把项目打包方式改为war包

<groupId>com.example</groupId>
<artifactId>tomcat-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

2. 引入spring-boot-starter-tomcat

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 设置为provided, 在打包时会将该包排除,因为要放到独立的tomcat中运行,不需要。 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

3.  修改启动类,继承 SpringBootServletInitializer 重写 configure 方法,并加入测试方法hello()。

@RestController
@SpringBootApplication
public class TomcatDemoApplication extends SpringBootServletInitializer{

	public static void main(String[] args) {
		SpringApplication.run(TomcatDemoApplication.class, args);
	}

	@GetMapping("/hello")
	public String hello() {
		return "hello world";
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(TomcatDemoApplication.class);
	}
}

4. 打包(跳过测试)

package -DskipTests

二. 把项目部署到Tomat中

1. 把打好的war包放到Tomcat的webapp/ROOT目录下并解压

[root@rocketmq-nameserver1 ROOT]# pwd
/home/zhaoxing/apache-tomcat-8.5.32/webapps/ROOT
[root@rocketmq-nameserver1 ROOT]# ls
tomcat-demo-0.0.1-SNAPSHOT.war
[root@rocketmq-nameserver1 ROOT]# unzip tomcat-demo-0.0.1-SNAPSHOT.war 
Archive:  tomcat-demo-0.0.1-SNAPSHOT.war
   creating: META-INF/
   inflating: META-INF/MANIFEST.MF    
   creating: org/
   creating: org/springframework/
   creating: org/springframework/boot/
   creating: org/springframework/boot/loader/
   creating: org/springframework/boot/loader/data/
   ...  
[root@rocketmq-nameserver1 ROOT]# ls
META-INF  org  tomcat-demo-0.0.1-SNAPSHOT.war  WEB-INF

2. 在Tomcat bin目录下启动脚本start.sh

[root@rocketmq-nameserver1 ROOT]# cd /home/zhaoxing/apache-tomcat-8.5.32/bin/
[root@rocketmq-nameserver1 bin]# ls
bootstrap.jar       commons-daemon.jar            daemon.sh         setclasspath.sh  startup.sh            tool-wrapper.sh
catalina.bat        commons-daemon-native.tar.gz  digest.bat        shutdown.bat     tomcat-juli.jar       version.bat
catalina.sh         configtest.bat                digest.sh         shutdown.sh      tomcat-native.tar.gz  version.sh
catalina-tasks.xml  configtest.sh                 setclasspath.bat  startup.bat      tool-wrapper.bat
[root@rocketmq-nameserver1 bin]# ./startup.sh 
Using CATALINA_BASE:   /home/zhaoxing/apache-tomcat-8.5.32
Using CATALINA_HOME:   /home/zhaoxing/apache-tomcat-8.5.32
Using CATALINA_TMPDIR: /home/zhaoxing/apache-tomcat-8.5.32/temp
Using JRE_HOME:        /opt/jdk1.8.0_172
Using CLASSPATH:       /home/zhaoxing/apache-tomcat-8.5.32/bin/bootstrap.jar:/home/zhaoxing/apache-tomcat-8.5.32/bin/tomcat-juli.jar
Tomcat started.
[root@rocketmq-nameserver1 bin]# ps -ef |grep tomcat
root      64030      1 66 10:58 pts/0    00:00:06 /opt/jdk1.8.0_172/bin/java -Djava.util.logging.config.file=/home/zhaoxing/apache-tomcat-8.5.32/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /home/zhaoxing/apache-tomcat-8.5.32/bin/bootstrap.jar:/home/zhaoxing/apache-tomcat-8.5.32/bin/tomcat-juli.jar -Dcatalina.base=/home/zhaoxing/apache-tomcat-8.5.32 -Dcatalina.home=/home/zhaoxing/apache-tomcat-8.5.32 -Djava.io.tmpdir=/home/zhaoxing/apache-tomcat-8.5.32/temp org.apache.catalina.startup.Bootstrap start
root      64047  63968  0 10:58 pts/0    00:00:00 grep --color=auto tomcat

3. 测试

[root@rocketmq-nameserver1 bin]# curl http://127.0.0.1:8080/hello
hello world[root@rocketmq-nameserver1 bin]# 

注:主机上访问关闭防火墙

原文地址:https://www.cnblogs.com/codestarer/p/13635536.html