SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat

2022年6月5日11:25:46

SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat

我们知道SpringBoot是一个快速开发框架,web项目可以直接打包成jar包直接放到服务器上执行java -jar就运行了,那是因为SpringBoot内置了Tomcat服务器。那么这里有人就想杠一下了,我就想部署到自己服务器上的Tomcat怎么办?不急,一步一步来

修改pom文件

想要将SpringBoot的Web项目运行到外部的Tomcat,首先要修改pom文件,有以下几个地方

  1. 首先打包方式要由之前的jar改成war

    <!-- <packaging>jar</packaging> -->
    改成<packaging>war</packaging>
  2. 其次移除SpringBoot内置的Tomcat,或者将Tomcat的scope改为provided

    <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>
    或者<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>

    以上两种方案都是可行的。对于maven中的scope,这里简单介绍以下

    maven中的scope有compile、provided、runtime、test、system五种,每种的作用范围不一样

    • compile
      默认的scope,表示这些dependency贯穿程序的整个生命周期。而且这些依赖会传递到依赖的项目中,会随着项目一起发布
    • provided
      跟compile相似,但这些依赖是由JDK或者容器提供,例如Servlet AP和一些Java EE API。这个scope 只能作用在编译和测试时,没有传递性
    • runtime
      表示这些依赖仅作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。
    • test
      表示依赖仅作用在测试时,不会随项目发布。
    • system
      跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
  3. 添加标签
    在使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的server.portserver.servlet.context-path将失效,请使用tomcat的端口与webapps下项目名进行访问。为了防止应用上下文所导致的项目访问资源加载不到的问题,建议pom.xml文件中标签下添加标签

    <build><finalName>hello-nginx</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>

修改Application类

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服务器,那么你不需要这个。

那么,来吧!开始改造我们的启动类

@SpringBootApplicationpublicclassNginxApplicationextendsSpringBootServletInitializer{publicstaticvoidmain(String[] args){SpringApplication.run(NginxApplication.class, args);}@OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilder builder){return builder.sources(NginxApplication.class);}}

打包

以上工作做完后我们就可以将项目打包了,按下图的红色箭头指示一步一步操作就行了
SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat

部署

  1. 启动我们的虚拟机[Christy090(server)](https://blog.csdn.net/bbxylqf126com/article/details/109062171),切换到/usr/apps/tomcat/webapps目录下执行rz命令上传我们的hello-bginx.war
    SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat
  2. 执行命令startup.sh | tail -f /usr/apps/tomcat/logs/catalina.out启动Tomcat服务器,能看到我们久违的图标并且不报错的话,那么恭喜你启动成功了
    SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat
  3. 浏览器中输入http://192.168.10.190:8080/hello-nginx/nginx/index,大功告成!!!
    SpringBoot.13.SpringBoot将web项目打包成war包部署到外部Tomcat
  • 作者:潮汐先生
  • 原文链接:https://hardy.blog.csdn.net/article/details/109087684
    更新时间:2022年6月5日11:25:46 ,共 2487 字。