• 1 前言
  • 2 修改步骤
    • 2.1 修改打包方式(jar -> war)
    • 2.2 排除 SprignBoot的Web模块中的Tomcat依赖
      • 2.2.1 将嵌入的Tomcat依赖方式改成 provided
      • 2.2.2 直接排除Web模块中的Tomcat依赖
    • 2.3 修改启动类,并重写初始化方法
      • 2.3.1 官方文档的写法
      • 2.3.2 我的写法
  • 3 生成 webapp 目录
  • 4 部署到外部的Tomcat容器
    • 4.1 打成 war 包
    • 4.2 浏览器验证

1 前言

Spring Boot 版本: 2.3.2.RELEASE

SpringBoot官方文档——Create a Deployable War File

SpringBoot的 Web模块 默认内嵌了Tomcat作为Servlet容器,因此,我们可以直接编写SpringBoot 启动类,直接通过启动类,一键开启Tomcat服务,确实是 nb plus!!!

但是,有些情况下,我们的Tomcat服务器,需要另外专门部署,会更好维护,此时,我们就考虑排除SpringBoot 的 Web模块中的Tomcat依赖,进而可以将SpringBoot应用部署到外部的Tomcat容器中。

2 修改步骤

2.1 修改打包方式(jar -> war)

修改 pom.xml 文件,修改打包方式为 war

<groupId>com.springboot.template</groupId>
<artifactId>servlet-container-war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 这里打成war包 若打jar,需将war改为jar -->
<packaging>war</packaging>

2.2 排除 SprignBoot的Web模块中的Tomcat依赖

这里有两种方案:(官方文档使用第一种)

2.2.1 将嵌入的Tomcat依赖方式改成 provided

修改 pom.xml 文件,将嵌入的Tomcat依赖方式改成provided(编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat),确保嵌入式servlet容器不干扰war文件所部署到的servlet容器。

<!--SpringBoot 的 Web模块内嵌的tomcat依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><!-- 编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat --><scope>provided</scope>
</dependency>

注意:

将SpringBoot的Web模块 提供的嵌入式servlet容器依赖关系标记为provided时,将生成可执行的war文件,其中提供的依赖关系打包在lib提供的目录中。

这意味着,除了可以部署到servlet容器之外,还可以通过在命令行上使用java -jar运行该应用程序。

2.2.2 直接排除Web模块中的Tomcat依赖

修改 pom.xml 文件,在引入的Web模块处修改,如下:

排除内嵌的Tomcat依赖

<!-- SpringBoot的web模块 依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 排除SpringBoot的web模块默认内嵌的Servlet容器 Tomcat--><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>

由于排除了Tomcat依赖,没有了servlet实现,因此,需要引入servlet依赖

<!-- servlet 依赖 -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><!--<scope>provided</scope>-->
</dependency>

注意:

Spring Boot 必须在Servlet 3.0规范以上容器中运行。

2.3 修改启动类,并重写初始化方法

如果打算以 war 或 jar (可执行应用程序) 的形式启动应用程序,则需要使用SpringBootServletInitializer回调可用的configure方法和类似于以下类的main方法中的共享方法来共享构建器的自定义项:

2.3.1 官方文档的写法

// 修改 SpringBoot 启动类
// 继承 SpringBootServletInitializer 类
// 重写 configure 方法
@SpringBootApplication
public class SpringBootStartApplication  extends SpringBootServletInitializer {public static void main(String[] args) {configureApplication(new SpringApplicationBuilder()).run(args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return configureApplication(builder);}private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {return builder.sources(Application.class).bannerMode(Banner.Mode.OFF);}}

2.3.2 我的写法

在SpringBoot中我们平常用main方法启动的方式,都有一个SpringBootApplication的启动类,类似代码如下:

@SpringBootApplication
public class SpringBootStartApplication {public static void main(String[] args) {SpringApplication.run(SpringBootStartApplication.class, args);}
}

而我们现在需要类似于web.xml的配置方式来启动spring应用,为此,我们在SpringBootStartApplication类的同级上添加一个ServletInitializer类,其代码如下:

// 继承 SpringBootServletInitializer 类
// 重写 configure 方法
public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {// 传入SpringBoot应用的主程序// 自定义应用程序或调用application.sources(...)以添加源// 由于我们的示例本身就是@Configuration类(通过@SpringBootApplication)// 我们实际上不需要重写此方法return builder.sources(ServletContainerWarApplication.class);}}

3 生成 webapp 目录


修改完成后, 记得apply,就会生成webapp目录,以及目录下的 /WEB-INF/web.xml 文件

4 部署到外部的Tomcat容器

4.1 打成 war 包

在项目根目录下(即包含pom.xml的目录)(命令行 或 终端)执行maven打包操作:

mvn clean package

等待打包完成,出现 [INFO] BUILD SUCCESS 即为打包成功

或者,直接使用 IDEA 打包

将war包放到Tomcat的weapps目录下,启动服务器就可以使用了

4.2 浏览器验证

http://你的域名或IP地址:[端口号]/[打包项目名]

SpringBoot——使用外置的Tomcat服务器相关推荐

  1. 转-SpringBoot——使用外置的Tomcat服务器

    转自: SpringBoot--使用外置的Tomcat服务器_架构师的小跟班的博客-CSDN博客_springboot使用外置tomcat1 前言2 修改步骤2.1 修改打包方式(jar -> ...

  2. IDEA导出springboot war包进tomcat服务器

    IDEA导出springboot war包进tomcat服务器出现的问题 按照网上的参考资料导出war包在放进服务器总是出现问题. 1.pom文件 因为springboot自带内置一个tomcat,但 ...

  3. idea springboot配置外置tomcat好处

    idea springboot配置外置tomcat好处: 1.原先用内置的tomcat,改动一点点java代码,热部署时会自动重启(可以重控制台中重到)---------慢 2.原先用内置的tomca ...

  4. springboot需要tomcat服务器吗_嵌入式 Tomcat AJP 协议对 SpringBoot 应用的影响

    前言 2020 年 1 月 6 日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的 Apache Tomcat 文件包含漏洞.Tomcat AJP 协议由于存在实现缺陷导 ...

  5. SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径

    前言:SpringBoot 图片存储存放  域名+图片路径访问 https://xxx.xxx.cn/uploadimage/202206165dc6fd50-3432-4a50-a5c4-14a55 ...

  6. IDEA打包springboot项目为war并发布到tomcat服务器

    最近有个springboot项目要发布到独立的tomcat下运行,其中遇到了很多坑,在此记录下: 1.springboot项目打包配置: 首先在启动类目录下新增打包类 备注:启动类继承自SpringB ...

  7. SpringBoot设置外置tomcat

    今天需要设置外置的tomcat的启动......所以尝试了一下.记录一下过程,为以后回顾. 步骤如下: 第一步,编辑 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 配置完之后,,启动.. ...

  8. SpringBoot使用外置的Servlet容器

    Spring Boot使用外部的Servlet容器支持JSP页面 : 使用 嵌入式Servlet容器:应用打成可执行的jar 优点:简单.便携: 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ ...

  9. 为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿迈达 toutiao.com/a6775476659416 ...

最新文章

  1. iOS11解决导航栏影藏返回文字的方法
  2. ae输出quicktime设置_AE大神再现酷炫神技能,AE中怎么输出带透明通道的视频文件!...
  3. 计算机科学 理学,077500计算机科学与技术(理学).doc
  4. Java 中的目录创建处理
  5. leetcode 220. 存在重复元素 III(排序)
  6. mysql 多个密码登录_mysql 多实例登录密码测试
  7. ubuntu16.04下载caffe(CPU版本)及部分文件说明
  8. 在cs后台页面获取input的值方法
  9. Linux安装卸载Mysql数据库
  10. 游戏开发之类的初始化成员列表和委托构造函数(C++基础)
  11. 记录一下Android 长截屏功能
  12. 基因工程-5-目的基因导入受体细胞的方法
  13. 视频编码格式全面解析
  14. 如何用Python实现股票量化交易?
  15. 稞麦显示无法连接服务器,Modern Ops无法连接服务器是什么原因
  16. 中职计算机教学工作随笔,教师随笔日记(精选6篇)
  17. 当今主流浏览器内核简介
  18. hotmail接收邮件服务器(pop),Microsoft微软邮箱 outlook、hotmail 打开pop和imap的方法
  19. “基尔霍夫电流定律”电子教案
  20. 如何应对客户投诉,对上游部门如何投诉

热门文章

  1. 计算机毕业设计springboot化妆品商城网站
  2. 所有初始化参数说明(转)
  3. Java程序设计实验3 | 面向对象(上)
  4. Android PDF原生实现 PDF阅读、PDF手势伸缩、PDF目录、PDF预览缩略图 PDF方案选择 google doc android-pdfview mupdf pdf.js x5
  5. 详解JUC高并发编程
  6. 计算机管理 没有适当的权限,电脑管家没有合适的权限打开是怎么回事?
  7. zotero快速导入标准参考文献格式
  8. 题目 1546: 班级排名
  9. java io null异常_NullPointerException
  10. 雷帝嘎嘎:可以写汉字的洒水三轮车