亲宝软件园·资讯

展开

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

allway2 人气:0

如何在不牺牲嵌入式应用服务器的直接执行能力的情况下,将 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 版本、语言或构建工具。当然还有所有的依赖关系。

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

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

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

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

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

创意整合

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

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

File → New Project → Spring Initializr

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

现有应用程序

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

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

嵌入式雄猫依赖

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

马文

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

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

格拉德尔

使用 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

<packaging>jar</packaging>

到WAR包装

<packaging>war</packaging>

格拉德尔

在 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

加载全部内容

相关教程
猜你喜欢
用户评论