将 Spring Boot 应用程序部署为 WAR
使用 Spring Boot,这种方法是相反的,因为应用程序服务器直接位于您的 JAR 中。很棒的是,这样的 WAR 仍然可以自行执行,这很有用。当您已经将现有的 Spring 引导应用程序打包为 JAR 时,该过程稍微复杂一些,但仍然很简单。如何在不牺牲嵌入式应用服务器的直接执行能力的情况下,将 JAR Spring 启动应用更改为打包和部署为 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 版本、语言或构建工具。当然还有所有的依赖关系。
您需要打开“选项”部分以指定打包。
在高级选项部分中,有“打包”选择。默认情况下,有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.xml
dependencies
<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
如果你愿意,而不是一个单独的类,你可以让你的类扩展类并包含与上面相同的方法。@SpringBootApplication
SpringBootServletInitializer
configure
更改包装
现在,最后一步是确保您的应用正确打包为 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 package
gradle build
现在,您可以部署到您选择的应用程序服务器。
运行WAR
这种方法很酷的地方在于,您仍然可以将 WAR 作为带有嵌入式 Tomcat 的可执行文件运行。这样,您可以在不牺牲直接可执行性的情况下进行 WAR 部署。
只需像往常一样运行存档即可。将最后一个参数替换为 WAR 的真实名称。
java -jar demo-1.0.0-SNAPSHOT.war
更多推荐
所有评论(0)