学科分类
目录
Spring Boot开发

War包方式打包部署

虽然通过Spring Boot内嵌的Tomcat可以直接将项目打成Jar包进行部署,但有时候还需要通过外部的可配置Tomcat进行项目管理,这就需要将项目打成War包。这里,以chapter05项目为例讲解如何将Spring Boot项目以War包方式打包部署,具体操作如下所示。

1. War包方式打包

(1)声明打包方式为War包。打开chapter05项目的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服务器。打开chapter05项目的pom.xml文件,在依赖文件中将Tomcat声明为外部提供,示例代码如下。

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

上述代码中,spring-boot-starter-tomcat指定的是Spring Boot内嵌的Tomcat服务器,使用<scope>provided</scope>将该服务器声明为外部已提供provided。这样,在项目打包部署时,既可以使用外部配置的Tomcat以War包形式部署,还可以使用内嵌Tomcat以Jar包形式部署。

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

@ServletComponentScan  // 开启基于注解方式的Servlet组件扫描支持
@SpringBootApplication
public class Chapter05Application extends SpringBootServletInitializer {
    // 3、程序主类继承SpringBootServletInitializer,并重写configure()方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Chapter05Application.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(Chapter05Application.class, args);
    }
}

上述代码中,主程序启动类Chapter05Application继承SpringBootServletInitializer类并实现configure()方法,在configure()方法中,sources(Chapter05Application.class,args)方法的首个参数必须是项目主程序启动类。需要说明的是,为Spring Boot提供启动的Servlet初始化器SpringBootServletInitializer时,典型的做法就是让主程序启动类继承SpringBootServletInitializer类并实现configure()方法;除此之外,还可以在项目中单独提供一个继承SpringBootServletInitializer的子类,并实现configure()方法。

执行完上述3步操作后,就可以将项目以War包形式进行打包了。War包形式的打包方式与5.4.1小节中的打包方式完全一样,这里就不再详细展示说明了。项目打成War包后,在IDEA开发工具的target中查看打成的War包效果,如图1所示。

图1 IDEA工具下项目打包执行效果

2. War包方式部署

将打包好的War包拷贝到Tomcat安装目录下的webapps目录中,执行Tomcat安装目录下bin目录中的startup.bat命令启动War包项目。项目启动后,执行效果如图2所示。

图2 外部Tomcat部署War项目执行效果

从图2可以看出,使用外部Tomcat成功启动了以War包形式打包的Spring Boot项目。需要说明的是,这种使用外部Tomcat部署的项目进行访问时,必须加上项目名称(打成war包后的项目全名),例如此处访问chapter05项目登录页面时的具体请求地址为“http://localhost:8080/chapter05-0.0.1-SNAPSHOT/login”。

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

小提示:

5.4.2小节讲解Spring Boot项目以War包形式进行打包部署时,是将打包好的war包文件手动添加到外部安装的Tomcat服务器中进行部署。在实际开发中,还可以直接在开发工具中配置外部Tomcat进行项目部署调试,本书使用的IDEA开发工具对Tomcat的配置也非常方便,只需要单击IDEA工具右上角快速启动栏图标img倒三角中的“Edit Configurations”选项进行外部Tomcat配置和项目部署即可,具体配置可以参考网上相关资料。

点击此处
隐藏目录