Spring Boot 2 实战:以 War 包的形式部署
发布日期:2021-05-09 02:25:54 浏览次数:3 分类:博客文章

本文共 2908 字,大约阅读时间需要 9 分钟。

文章目录

1. 前言

Spring Boot 提供了内置的 tomcatundertowjetty 三种 Servlet Web 容器。让我们开箱即用,可以迅速以 JAR 启动一个 Web 应用。但是在某些场景中我们可能还需要将我们的 Spring Boot 容器以 War 的形式进行传统的部署。这时我们就需要通过借助于 SpringBootServletInitializer 来实现。

2. SpringBootServletInitializer

SpringBootServletInitializerWebApplicationInitializer 的实现,它从部署在 Web 容器上的传统 WAR 包运行 Spring Boot 应用。该类将 ServletFilterServletContextInitializer Bean 从应用程序上下文绑定到服务器。SpringBootServletInitializer 类还允许我们通过覆盖 SpringApplicationBuilder configure(SpringApplicationBuilder application)方法来配置由 Servlet 容器运行的应用程序。

3. Spring Boot War 部署

接下来我们来讲述详细的 Spring Boot War 部署步骤。

3.1 修改打包方式为 War

修改 Spring Boot 项目的 pom.xml 文件将打包方式修改为 war

默认打 jar<packaging>jar</packaging> 我们改为打 war<packaging>war</packaging>

3.2 排除 内嵌的 Web 容器。

默认使用内嵌 Tomcat Web 容器。如果此前你使用了内嵌的 JettyUndertow ,请务必清除相关的 Starter 依赖。然后我们可以使用两种方式来处理:

  • 方法一

Spring Boot 内嵌的Tomcat默认已经集成在spring-boot-starter-web包里,所以我们要排除掉它。

xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
此方式我们把 Servlet Api 依赖也排除掉了, SpringBootServletInitializer 需要依赖 Servlet Api ,因此我们要加上它(务必注意 versionNumber 版本要跟你外置的 Tomcat 版本兼容)。
xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${versionNumber}</version> <scope>provided</scope> </dependency>

  • 方法二

我们通过引入 spring-boot-starter-tomcat 覆盖掉默认的内置 Tomcat 并设置作用范围(scope)是provided(编译、测试)。

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

3.3 实现 SpringBootServletInitializer 接口

新建 SpringBootServletInitializer 的实现类 ServletInitializer 如下:

package cn.felord.war;  import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;  /**  * @author Felordcn  */ public class ServletInitializer extends SpringBootServletInitializer {      @Override     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {          return application.sources(WarSpringBootApplication.class);     }  }

其中 WarSpringBootApplicationSpring Boot 的入口类,跟原来没什么两样:

package cn.felord.war;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;  /**  * @author Felordcn  */ @SpringBootApplication public class WarSpringBootApplication {      public static void main(String[] args) {         SpringApplication.run(WarSpringBootApplication.class, args);     }  }

3.4 编译打包

通过 maven 命令 mvn clean package 执行编译,稍等片刻,就会获得 ${artifactId}-${version}.war ,然后你就可以以传统的 War 部署方式运行 Spring Boot 应用了。

4. 总结

总体来说 War 部署 Spring Boot 的方式也并不复杂。如果还有疑惑可参考 DEMO ,DEMO 可通过关注公众号:Felordcn 回复 war 来获取。

关注公众号:Felordcn获取更多资讯

转载地址:https://www.cnblogs.com/felordcn/p/12142518.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:HashMap源码分析(一)(超级详细)
下一篇:HashMap源码分析(二):看完彻底了解HashMap

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月01日 23时25分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc 2019-04-21
java中的无效的列类型_java.sql.SQLException: 无效的列类型: 1111 2019-04-21
php rewrite url_PHP_URL Rewrite的设置方法,URL Rewrite需要服务器的支持! - phpStudy 2019-04-21
php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程 2019-04-21
打印php错误日志,php怎样打印错误日志 2019-04-21
Calendar导入java,Java程序使用Calendar.add()方法将分钟添加到当前时间 2019-04-21
mysql中用户线程作用,mysql用户线程的建立与用户线程的状态源码解析 2019-04-21
php页面引用公共文件,WeiPHP插件模板中快速引入公共模板文件 2019-04-21
php tracy,admin.php 2019-04-21
php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性 2019-04-21
oracle比较强大的函数,SQL和ORACLE函数比较 2019-04-21
oracle12c order by,oracle 数据库中order by 的一些高级用法 2019-04-21
oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解 2019-04-21
导出oracle11g的空表,轻松解决oracle11g 空表不能 exp 导出 的问题。 2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理 2019-04-21
oracle numlist,oracle sql str2numlist numtabletype 2019-04-21
php红包平均分配,红包平均分配算法 2019-04-21
linux磁盘的命令是,linux磁盘相关的命令 2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存 2019-04-21
linux查进程内存问题,关于linux 查看服务进程内存,cpu,内存占用的一些基础命令... 2019-04-21