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

桃扇骨 2022-12-15 02:56 414阅读 0赞

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

      • 修改pom文件
      • 修改Application类
      • 打包
      • 部署

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

修改pom文件

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

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

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

    1. <dependency>
    2.   <groupId>org.springframework.boot</groupId>
    3.     <artifactId>spring-boot-starter-web</artifactId>
    4.     <!-- 移除嵌入式tomcat插件 -->
    5.     <exclusions>
    6.       <exclusion>
    7.         <groupId>org.springframework.boot</groupId>
    8.         <artifactId>spring-boot-starter-tomcat</artifactId>
    9.       </exclusion>
    10.     </exclusions>
    11. </dependency>
    12. 或者
    13. <dependency>
    14.   <groupId>org.springframework.boot</groupId>
    15.   <artifactId>spring-boot-starter-tomcat</artifactId>
    16.   <scope>provided</scope>
    17. </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文件中标签下添加标签

    1. <build>
    2. <finalName>hello-nginx</finalName>
    3. <plugins>
    4. <plugin>
    5. <groupId>org.springframework.boot</groupId>
    6. <artifactId>spring-boot-maven-plugin</artifactId>
    7. </plugin>
    8. </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服务器,那么你不需要这个。

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

  1. @SpringBootApplication
  2. public class NginxApplication extends SpringBootServletInitializer {
  3. public static void main(String[] args) {
  4. SpringApplication.run(NginxApplication.class, args);
  5. }
  6. @Override
  7. protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  8. return builder.sources(NginxApplication.class);
  9. }
  10. }

打包

以上工作做完后我们就可以将项目打包了,按下图的红色箭头指示一步一步操作就行了
在这里插入图片描述

部署

  1. 启动我们的虚拟机[Christy090(server)](https://blog.csdn.net/bbxylqf126com/article/details/109062171),切换到/usr/apps/tomcat/webapps目录下执行rz命令上传我们的hello-bginx.war
    在这里插入图片描述
  2. 执行命令startup.sh | tail -f /usr/apps/tomcat/logs/catalina.out启动Tomcat服务器,能看到我们久违的图标并且不报错的话,那么恭喜你启动成功了
    在这里插入图片描述
  3. 浏览器中输入http://192.168.10.190:8080/hello-nginx/nginx/index,大功告成!!!
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,414人围观)

还没有评论,来说两句吧...

相关阅读