SpringBoot应用程序转换成WAR文件详解

如何在不牺牲嵌入式应用服务器的直接执行能力的情况下,将 JAR Spring 启动应用更改为打包和部署为 WAR。

WAR与JAR

默认情况下,Spring Boot 应用程序打包为带有嵌入式 Tomcat 的可执行 JAR 文件。您可以直接通过命令运行它们。传统的Java Web应用程序需要一个servlet容器(应用程序服务器)来运行。您需要安装、配置此类服务器,然后将应用程序部署到其中。而且您需要为每个环境准备这样的服务器。使用 Spring Boot,这种方法是相反的,因为应用程序服务器直接位于您的 JAR 中。这有很多优点,但有时您可能需要将 Spring Boot 应用程序作为传统的 WAR 来代替。例如,如果你受公司策略的约束,需要部署到提供的应用服务器。java -jar

在这篇文章中,我们将研究如何在不牺牲直接可执行性的情况下将 Spring Boot 应用程序打包为 WAR。

新应用

幸运的是,当您创建新应用程序时,该过程非常简单。您可以使用所有必需的设置和依赖项生成应用程序,而不是自己创建应用程序。有一个名为Spring Initializr的官方工具。

默认情况下,所有高级选项都是隐藏的。您可以只设置基本内容,例如 Spring 版本、语言或构建工具。当然还有所有的依赖关系。

您需要打开“选项”部分以指定打包。

SpringBoot应用程序转换成WAR文件详解_第1张图片

在高级选项部分中,有“打包”选择。默认情况下,有Jar。这意味着您将能够直接运行 JAR,因为它包含一个嵌入式 Tomcat 应用程序服务器。

您不能将 JAR 部署到其他应用程序服务器(Tomcat、Jetty、JBoss 等)以在那里运行它们。他们只适用于战争。为了能够将应用部署到这些应用,需要将打包更改为WAR。

SpringBoot应用程序转换成WAR文件详解_第2张图片

很棒的是,这样的 WAR 仍然可以自行执行,这很有用。例如,它非常适合本地开发,即使您在生产中使用常规应用服务器也是如此。

完成设置后,您可以单击生成项目,系统将下载包含应用的 zip 文件。

创意整合

使用 Spring Initializr 生成应用程序比手动创建应用程序更方便、更不容易出错。仍然有一些不便,因为您需要转到外部网页,下载zip文件并将其解压缩。

幸运的是,您可以直接从 IDE 使用 Spring Initializr。在IntelliJ IDEA中,您可以访问:

File → New Project → Spring Initializr

在这里,您可以像在网络版本中一样指定所有选项,但麻烦更少。

SpringBoot应用程序转换成WAR文件详解_第3张图片

现有应用程序

当您已经将现有的 Spring 引导应用程序打包为 JAR 时,该过程稍微复杂一些,但仍然很简单。您需要手动进行一些更改。

让我们将应用程序转换为 WAR,将哪个 van 部署到应用程序服务器(如 Tomcat),同时仍保持其可执行性。

嵌入式雄猫依赖

为了确保嵌入式 Tomcat 依赖项不会与目标 Tomcat 上已有的内容冲突,您需要将它们标记为提供。

马文

使用 Maven,只需将此依赖项添加到您的文件中即可。pom.xmldependencies


    org.springframework.boot
    spring-boot-starter-tomcat
    provided

格拉德尔

使用 Gradle,过程类似,只需将依赖项添加到具有提供范围的部分即可。dependencies

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

SpringBootServletInitializer

现在,您需要确保应用程序以 WAR 的形式正常运行。这就像将以下类添加到应用一样简单。

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(BootWarApplication.class);
    }
}

BootWarApplication.class是应用中批注的类。@SpringBootApplication

如果你愿意,而不是一个单独的类,你可以让你的类扩展类并包含与上面相同的方法。@SpringBootApplicationSpringBootServletInitializerconfigure

更改包装

现在,最后一步是确保您的应用正确打包为 WAR 而不是 JAR。

马文

只需从以下位置更新文件中的打包部分pom.xml

jar

到WAR包装

war

格拉德尔

在 Gradle 中,将插件添加到您的插件部分。war

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id 'war'
}

建立WAR

构建过程保持不变,这里没有变化,只需运行,它将生成您的 WAR。mvn packagegradle build

现在,您可以部署到您选择的应用程序服务器。

运行WAR

这种方法很酷的地方在于,您仍然可以将 WAR 作为带有嵌入式 Tomcat 的可执行文件运行。这样,您可以在不牺牲直接可执行性的情况下进行 WAR 部署。

只需像往常一样运行存档即可。将最后一个参数替换为 WAR 的真实名称。

java -jar demo-1.0.0-SNAPSHOT.war

到此这篇关于SpringBoot应用程序转换成WAR文件详解的文章就介绍到这了,更多相关SpringBoot转换WAR内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(SpringBoot应用程序转换成WAR文件详解)