spring boot cloud 部署脚本 sh spring boot怎么部署_编程实战与面试指南


 

《Spring Boot实战指南》

05-04:Spring Boot应用的打包和部署

 


传统的Web应用进行打包部署时,通常会打成War包的形式,然后将War包部署到Tomcat等服务器中,而Spring Boot应用使用的是嵌入式Servlet容器,也就是说,Spring Boot应用默认是以Jar包形式进行打包部署的,而如果想要使用传统的War包形式进行打包部署,就需要进行一些配置。


1、创建项目

spring boot cloud 部署脚本 sh spring boot怎么部署_spring_02


2、Jar包方式打包部署

由于Spring Boot应用中已经嵌入了Tomcat服务器,所以将Spring Boot应用以默认Jar包形式进行打包部署非常简单和方便。

2.1 Jar包方式打包

1.添加Maven打包插件。在对Spring Boot项目进行打包(包括Jar包和War包)前,需要在项目pom.xml文件中加入Maven打包插件,Spring Boot为项目打包提供了整合后的Maven打包插件spring-boot-maven-plugin,可以直接使用。

<build>
    <plugins>
        <!-- Maven打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2.使用IDEA开发工具进行打包。IDEA开发工具除了提供Java开发的便利之外,还提供了非常好的项目打包支持。

(1) 使用IDEA开发工具对Spring Boot项目进行打包时,首先需要单击界面右侧边框视图栏的[Maven]视图,然后在[Maven]视图对应的操作窗口中,选择项目目录下[Lifecycle]目录中的[package]选项,直接双击就可以进行项目打包了。

spring boot cloud 部署脚本 sh spring boot怎么部署_spring_03

(2) 双击[package]选项执行打包后,控制台Run界面中最终显示出了"BUILD SUCCESS"的信息,这说明SpringBoot项目打包成功。

spring boot cloud 部署脚本 sh spring boot怎么部署_艾特谷_04

(3) 我们还可以打开IDEA开发工具下项目的target目录中查看Jar包的具体存放路径以及名称。

spring boot cloud 部署脚本 sh spring boot怎么部署_aitegu_05

3.Jar包目录结构展示说明。我们可以将Jar文件解压到当前目录,并在命令提示符下使用tree命令查看其整个目录结构。

F:\...\SpringBoot0505Deploy\target\springboot0505-deploy-0.0.1-SNAPSHOT>tree
卷 BACK 的文件夹 PATH 列表
卷序列号为 9A79-9E6B
F:.
├─BOOT-INF
│  ├─classes
│  │  ├─com
│  │  │  └─company
│  │  │      └─project
│  │  │          └─controller
│  │  ├─static
│  │  │  └─login
│  │  │      ├─css
│  │  │      ├─img
│  │  │      └─js
│  │  └─templates
│  └─lib
├─META-INF
│  └─maven
│      └─com.company
│          └─springboot0505-deploy
└─org
    └─springframework
        └─boot
            └─loader
                ├─archive
                ├─data
                ├─jar
                ├─jarmode
                └─util

(1) 进入Jar包存放位置,右击Jar包名称,使用压缩软件打开并进入到BOOT-INF目录下,效果如下所示。

spring boot cloud 部署脚本 sh spring boot怎么部署_goldentec_06

(2) 打成的Jar包BOOT-INF目录下有libclasses两个目录文件。

  • liblib目录下对应着所有添加的依赖文件导入的jar文件;lib目录下还包括Tomcat相关的jar文件,并且名字中包含有"tomcat-embed"字样,这是Spring Boot内嵌的Jar包形式的Tomcat服务器。
  • spring boot cloud 部署脚本 sh spring boot怎么部署_艾特谷_07

  • classesclasses目录下对应着项目打包编译后的所有文件。
  • spring boot cloud 部署脚本 sh spring boot怎么部署_艾特谷_08

2.2 Jar包方式部署

1.先在IDEA开发工具控制台上单击切换到Terminal终端界面,该界面会默认打开项目所在位置;然后输入"java -jar xxx.jar"指令部署启动对应Jar包。

cd  target

java -jar target\chapter05-0.0.1-SNAPSHOT.jar

2.执行完上述指令后,Terminal终端界面就会启动Spring Boot项目,并显示默认的端口号8080。执行成功后,就可以访问项目了。

spring boot cloud 部署脚本 sh spring boot怎么部署_艾特谷_09

需要说明的是,这里演示的是通过IDEA开发工具提供的Terminal终端界面进行快速的Jar包部署,除此之外,还可以使用系统自带的终端窗口进行项目Jar包部署启动。另外,在项目部署过程中,一定要保证执行的xxx.jar包可以找到并且路径中没有特殊字符(例如空格)。


3、War包方式打包部署

虽然通过Spring Boot内嵌的Tomcat可以直接将项目打成Jar包进行部署,但有时候还需要通过外部的可配置Tomcat进行项目管理,这就需要将项目打成War包。

3.1、War包方式打包

1.声明打包方式为War包。打开当前项目的pom.xml文件,使用packaging标签将Spring Boot项目默认的Jar包打包方式修改为War形式。

<description>Demo project for Spring Boot</description>
<!-- 1.将项目打包方式声明为war -->
<packaging>war</packaging>
<properties>
    <java.version>1.8</java.version>
</properties>

2.声明使用外部Tomcat服务器。Spring Boot为项目默认提供了内嵌的Tomcat服务器,为了将项目以War形式进行打包部署,还需要声明使用外部Tomcat服务器。打开当前项目的pom.xml文件,在依赖文件中将Tomcat声明为外部提供。

<!-- 2.声明使用外部提供的Tomcat -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- 将服务器声明为外部已提供 -->
    <scope>provided</scope>
</dependency>

这样,在项目打包部署时,既可以使用外部配置的TormcatWar包形式部署,还可以使用内嵌TomcatJar包形式部署。

3.提供Spring Boot启动的Servlet初始化器。将Spring Boot项目生成可部署War包的最后一步是提供SpringBootServletInitializer子类并覆盖其configure()方法,这样做是利用了Spring框架的Servlet 3.0支持,允许应用程序在Servlet容器启动时可以进行配置。打开项目的主程序启动类Application,让其继承SpringBootServletInitializer并实现configure()方法。

package com.company.project;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@ServletComponentScan // 开启基于注解方式的Servlet组件扫描支持
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    
    /** 3.程序主类继承SpringBootServletInitializer,并重写configure()方法 */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

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

}

4.将项目以War包形式进行打包了。War包形式的打包方式与Jar的打包方式完全一样。项目打成War包后,在IDEA开发工具的target中查看打成的War包效果。

spring boot cloud 部署脚本 sh spring boot怎么部署_aitegu_10

3.2、War包方式部署

我们讲解Spring Boot项目以War包形式进行打包部署时,是将打包好的War包文件手动添加到外部安装的Tomcat服务器中进行部署。在实际开发中,还可以先直接在开发工具中配置外部Tomat进行项目部署调试。

1.在Idea中配置一个Tomcat服务器,运行整个项目做测试,以保证独立Tomcat下部署War包更加顺利。

spring boot cloud 部署脚本 sh spring boot怎么部署_spring_11

2.将打包好的War包复制到Tomcat安装目录下的webapps目录中。

spring boot cloud 部署脚本 sh spring boot怎么部署_编程实战与面试指南_12

3.执行Tomcat安装目录下bin目录中的startup.bat命令启动War包项目。项目启动后,执行效果如下图所示。

spring boot cloud 部署脚本 sh spring boot怎么部署_aitegu_13

4.访问使用外部Tomcat部署的项目时,必须加上项目名称(打成War包后的项目全名)。

项目首页:http://localhost:8888/springboot0505-deploy-war-0.0.1-SNAPSHOT/
登录页面:http://localhost:8888/springboot0505-deploy-war-0.0.1-SNAPSHOT/plat-user/to-login-page

spring boot cloud 部署脚本 sh spring boot怎么部署_aitegu_14

5.手动部署时,如果觉得生成的原War包名称较长,可改简洁名称后部署。

spring boot cloud 部署脚本 sh spring boot怎么部署_艾特谷_15

注意:Spring Boot 2.5.4版本默认支持的内嵌式Tomcat为9.0.52版本,将指定版本Spring Boot项目以War包形式部署到外部Tomcat服务器中时,应尽量使用与Spring Boot版本项目匹配的Tomcat版本进行项目部署,否则在部署过程中可能出现异常。