【项目实战】SpringBoot项目在外部tomcat环境下部署(如何基于SpringBoot将项目打包成war包,并且部署到tomcat中)

一、背景讲述,为什么需要支持这种场景?

在实际应用中,通过各种构建工具如Maven或Gradle来生成JAR文件或WAR文件,以便方便地进行打包和部署。SpringBoot默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以启动。但是,有时候更希望一个tomcat来管理多个项目,这种情况下就需要项目是war格式的包,而不是jar格式的包。

二、 Jar包和War包傻傻分不清楚

2.1 Jar包介绍

别人写好的类,并且打包好了,你可以用这些jar包。引入到你的项目中,然后你就可以直接使用这些jar包中的类还有属性了,这类jar包一般放在lib目录下。

  • Java Archive,Java 归档文件,JAR文件(Java Archive)

  • 通常包含一个或多个Java类文件和相关资源文件,如图像、声音等。

  • 它们主要用于将Java类库、应用程序和插件打包并分发给其他开发人员和使用者。

  • 与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。

  • JavaSE程序可以打包成Jar包

  • JAR 文件格式,以流行的 ZIP 文件格式为基础。

  • 与ZIP文件的区别,Jar可用于:

    • 压缩和发布
    • 部署和封装库、组件和插件程序
    • 被编译器和JVM工具直接使用
  • JAR中包含特殊文件:manifests 和部署描述符,作用:指示工具,如何处理特定的JAR

2.2 War包介绍

war包是javaweb程序打的包,一个war包可以理解为一个web项目,里面是项目的所有东西

  • WAR文件(Web Archive)
  • 一种特殊类型的JAR文件,专门用于将Web应用程序打包并部署到Java Web服务器上。
  • Sun提出的一种web应用程序格式,可以直接运行的web模块
  • 与JAR类似,是很多文件的压缩包。
  • 使用场景:用于网站中,打成包部署到容器中
  • Tomcat中的WAR包:将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。
  • WAR包中的文件按照一定目录结构来组织。
  • WAR文件必须有一个名为Web-INF的目录,其中包含Web应用程序的配置文件和类文件。
  • war包里面包含什么内容呢?WAR文件通常包含,
    • 代码编译成的class文件
    • 依赖的包
    • 配置文件
    • 所有的网站页面、Web资源文件(JSP、Servlet、HTML、CSS、JS文件)

三、如何部署war包到Tomcat(将war文件放到webapps文件夹中)

1)使用场景:开发打war包给测试,比如说,现在测试拿到一个war包,名字叫test.war。
2) 打开Tomcat的安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”
3)进入到 webapps文件夹中,把 test.war放到 webapps文件夹。
3)启动Tomcat。

如果不需要更改配置文件:到这一步就可以了。

在浏览器输入“http:localhost:tomcat_port/test即可打开test项目的 index.jsp页面(port是自己的端口号)。
如果test项目没有index.jsp页面,那就需要打开其他相应的页面。

四、基于SpringBoot将项目打包成war包,并且部署到Tomcat中具体步骤

SpringBoot同样提供了解决方案,只需要简单的几步更改就可以了,这里提供maven项目的解决方法:

主要步骤:
(1)修改启动类,继承SpringBootServletInitializer,重写configure方法
(2)修改pom文件。增加package标签以及新增dependencies

4.1 步骤1:继承SpringBootServletInitializer,并重写configure方法

将项目的启动类Application.java,继承SpringBootServletInitializer,并重写configure方法

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    
    
        return application.sources(Application.class);
    }
    public static void main(String[] args) throws Exception {
    
    
        SpringApplication.run(Application.class, args);
    }
}

4.2 步骤2:增加package标签

步骤2: 在pom.xml文件中,project下面增加package标签

<packaging>war</packaging>

4.3 步骤3:增加Tomcat依赖

步骤3:在pom.xml文件中,dependencies下面添加

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
</dependency>

只需要以上3步就可以打包成war包,并且部署到tomcat中了。
需要注意的是,这样部署的request url,需要在端口后,加上项目的名字,才能正常访问。

SpringBoot更加强大的一点就是:即便项目是以上配置,依然可以用内嵌的tomcat来调试,启动命令和以前没变,还是:mvn spring-boot:run。

如果需要在StringBoot中加上request前缀,需要在application.properties中添加server.contextPath=/prefix/即可。
其中prefix为前缀名。这个前缀会在war包中失效,取而代之的是war包名称,如果war包名称和prefix相同的话,那么调试环境和正式部署环境就是一个request地址了。

注意: 配置完过后,可能会出现无法在Idea Intellij运行报错的情况。与

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

此配置出现冲突.但是不影响maven打包。

如果要在idea运行测试,建议注释之前的配置。或者打包(war)放到本地tomcat启动测试.

猜你喜欢

转载自blog.csdn.net/wstever/article/details/131054920
今日推荐