SpringBoot——使用外置的Tomcat服务器
- 1 前言
- 2 修改步骤
- 2.1 修改打包方式(jar -> war)
- 2.2 排除 SprignBoot的Web模块中的Tomcat依赖
- 2.2.1 将嵌入的Tomcat依赖方式改成
provided
- 2.2.2 直接排除Web模块中的Tomcat依赖
- 2.2.1 将嵌入的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服务器相关推荐
- 转-SpringBoot——使用外置的Tomcat服务器
转自: SpringBoot--使用外置的Tomcat服务器_架构师的小跟班的博客-CSDN博客_springboot使用外置tomcat1 前言2 修改步骤2.1 修改打包方式(jar -> ...
- IDEA导出springboot war包进tomcat服务器
IDEA导出springboot war包进tomcat服务器出现的问题 按照网上的参考资料导出war包在放进服务器总是出现问题. 1.pom文件 因为springboot自带内置一个tomcat,但 ...
- idea springboot配置外置tomcat好处
idea springboot配置外置tomcat好处: 1.原先用内置的tomcat,改动一点点java代码,热部署时会自动重启(可以重控制台中重到)---------慢 2.原先用内置的tomca ...
- springboot需要tomcat服务器吗_嵌入式 Tomcat AJP 协议对 SpringBoot 应用的影响
前言 2020 年 1 月 6 日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的 Apache Tomcat 文件包含漏洞.Tomcat AJP 协议由于存在实现缺陷导 ...
- SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
前言:SpringBoot 图片存储存放 域名+图片路径访问 https://xxx.xxx.cn/uploadimage/202206165dc6fd50-3432-4a50-a5c4-14a55 ...
- IDEA打包springboot项目为war并发布到tomcat服务器
最近有个springboot项目要发布到独立的tomcat下运行,其中遇到了很多坑,在此记录下: 1.springboot项目打包配置: 首先在启动类目录下新增打包类 备注:启动类继承自SpringB ...
- SpringBoot设置外置tomcat
今天需要设置外置的tomcat的启动......所以尝试了一下.记录一下过程,为以后回顾. 步骤如下: 第一步,编辑 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 配置完之后,,启动.. ...
- SpringBoot使用外置的Servlet容器
Spring Boot使用外部的Servlet容器支持JSP页面 : 使用 嵌入式Servlet容器:应用打成可执行的jar 优点:简单.便携: 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ ...
- 为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿迈达 toutiao.com/a6775476659416 ...
最新文章
- iOS11解决导航栏影藏返回文字的方法
- ae输出quicktime设置_AE大神再现酷炫神技能,AE中怎么输出带透明通道的视频文件!...
- 计算机科学 理学,077500计算机科学与技术(理学).doc
- Java 中的目录创建处理
- leetcode 220. 存在重复元素 III(排序)
- mysql 多个密码登录_mysql 多实例登录密码测试
- ubuntu16.04下载caffe(CPU版本)及部分文件说明
- 在cs后台页面获取input的值方法
- Linux安装卸载Mysql数据库
- 游戏开发之类的初始化成员列表和委托构造函数(C++基础)
- 记录一下Android 长截屏功能
- 基因工程-5-目的基因导入受体细胞的方法
- 视频编码格式全面解析
- 如何用Python实现股票量化交易?
- 稞麦显示无法连接服务器,Modern Ops无法连接服务器是什么原因
- 中职计算机教学工作随笔,教师随笔日记(精选6篇)
- 当今主流浏览器内核简介
- hotmail接收邮件服务器(pop),Microsoft微软邮箱 outlook、hotmail 打开pop和imap的方法
- “基尔霍夫电流定律”电子教案
- 如何应对客户投诉,对上游部门如何投诉
热门文章
- 计算机毕业设计springboot化妆品商城网站
- 所有初始化参数说明(转)
- Java程序设计实验3 | 面向对象(上)
- Android PDF原生实现 PDF阅读、PDF手势伸缩、PDF目录、PDF预览缩略图 PDF方案选择 google doc android-pdfview mupdf pdf.js x5
- 详解JUC高并发编程
- 计算机管理 没有适当的权限,电脑管家没有合适的权限打开是怎么回事?
- zotero快速导入标准参考文献格式
- 题目 1546: 班级排名
- java io null异常_NullPointerException
- 雷帝嘎嘎:可以写汉字的洒水三轮车