springboot内置tomcat和外部tomcat部署总结_内嵌tomcat和外部tomcat-程序员宅基地

技术标签: Spring框架  spring boot  tomcat  

一.使用内置tomcat启动

我们知道 springboot项目内置了 tomcat 服务器,表现在pom.xml中

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

当我们使用IDEA 启动springboot 项目时,就会使用内置tomcat启动,

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

除此之外,还可以使用以下方法启动内置tomcat:

1、mvn springboot-run 命令
2、java -jar XXX.jar

注意:
使用java -jar默认情况下,不会启动任何嵌入式Application Server,该命令只是启动一个执行jar main的JVM进程,当spring-boot-starter-web包含嵌入式tomcat服务器依赖项时,执行java -jar则会启动Application Server

二.使用外置tomcat启动

配置步骤:
1、继承SpringBootServletInitializer
外部容器部署的话,就不能依赖于Applicationmain函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
 
@SpringBootApplication
public class Chapter05Application extends SpringBootServletInitializer {
    
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    
        return application.sources(Chapter05Application.class);
    }
 
    public static void main(String[] args) {
    
        SpringApplication.run(Chapter05Application.class, args);
    }
}

这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。
2、pom.xml修改tomcat相关的配置,将tomcat从starter-web中排除掉

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

注意:
对于移动到tomcat/webapps 中部署jar包,则是使用到外部的tomcat,这里需要注意一点,使用外部tomcat部署时,要不直接导包成war包,要不排除spring-boot-starter-web中的tomcat配置

三.Tomcat顶层结构图

在这里插入图片描述
Tomcat最顶层容器是Server,代表着整个服务器,一个tomcat只包含一个Server,一个Server包含多个Service。一个Service只有一个Container,但有多个Connector,这样一个服务可以处理多个连接。Connector用来处理连接相关的事情,并提供Socket到Request和Response相关转化。Container用于封装和管理Servlet,以及处理具体的Request请求。
多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务了,但是Service要提供服务又必须提供一个宿主环境,那就非Server莫属了,所以整个tomcat的声明周期都由Server控制。
在这里插入图片描述

具体springboot启动tomcat原理可以参考这篇文章:springboot内置tomcat启动原理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lizhengze1117/article/details/109676515

智能推荐

Linux字符设备驱动框架之IIC总线驱动框架_linux iic 设备是字符设备吗-程序员宅基地

文章浏览阅读621次。目录1、I2C简介2、I2C驱动框架2.1、I2C核心2.1.1、I2C bus初始化2.1.2 IIC核心提供的接口函数2.2 IIC总线驱动2.2.1 I.MX6U 的 I2C 适配器驱动分析2.3、IIC设备驱动2.3.1、I2C设备驱动解析2.3.2、I2C 设备驱动编写流程1、i2c设备信息描述2、i2c设备数据收发处理流程2.3.3、I2C设备驱动实例1、参考链接:https://www.cnblogs.com/linfeng-learning/p/9523046.html#_label22_linux iic 设备是字符设备吗

zynq使用lwip远程更新flash_zynq lwip-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏13次。1.目的zynq通过使用以太网实现远程更新flash,同时实现不断电重启,方便用户升级2.硬件环境vivado2018.2使用zynq7开发板zedboard,只需要搭建最小系统包括以太网、uart、flash控制器、ddr3.软件环境搭建硬件环境后,生成bit,导出到sdk该测试环境基于echo模板改动4.软件说明新增qspi_remote_update.h新增qspips...._zynq lwip

Python:在CMD窗口中调用python函数_cmd调用python函数-程序员宅基地

文章浏览阅读3w次,点赞18次,收藏28次。有时我们会需要在其他语言的环境下调用python,对不同的语言都有各自的方法。本文主要以CMD为例说明如何使用命令行运行某一个py文件下面的一个函数,主要使用如下代码:python -c "function_name(args)"这其中主要有两种情况:A.Python文件中只包含一个函数,而且不需要输入任何参数例如a.py为如下:print('hello world')........._cmd调用python函数

tsconfig.json 配置 update `jsx: “react“` into `jsx: “react-jsx“`终端警告_warn [warn] update `jsx: "react"` into `jsx: "reac-程序员宅基地

文章浏览阅读3.6k次。使用 umiJS 时出现的终端警告:WARN [WARN] update jsx: "react" into jsx: "react-jsx" to suport the new JSX transform in React 17 in tsconfig.json解决方法:确保 typescript 的依赖安装完成,随便打开一个提示错误的 .tsx 文件。macOS 使用 command + shift + p,Windows 貌似是 ctrl + shift + p。然后输入 TypeScri_warn [warn] update `jsx: "react"` into `jsx: "react-jsx"` to suport the new

利用Selenium控制网页内嵌滚动条_selenium 页面嵌套一个小页面 都有滚动-程序员宅基地

文章浏览阅读8.9k次,点赞7次,收藏35次。利用Selenium控制网页内嵌滚动条_selenium 页面嵌套一个小页面 都有滚动

UART串口IAP下载电路及BOOTLOADER分析_iap15下载口电路-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏3次。针对正点原子的开发板上串口IAP下载电路进行的分析关于BOOTLOADER在STM32芯片出厂时,官方已经在片上系统存储器中固化好bootloader程序,这是使用串行外设(USART,CAN,USB,I2C等)将用户的APP下载到内部FLASH中.bootloader程序主要功能使用嵌入式串行接口按照预定义的通信协议下载代码可传送并更新 Flash 代码、数据和向量表部分BOO..._iap15下载口电路

随便推点

jdk1.7和jdk1.8区别-程序员宅基地

文章浏览阅读66次。在jdk7的新特性方面主要有一下几方面的增强本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容。官方文档在jdk7的新特性方面主要有下面几方面的增强:jdk1.7语法上1.1 二进制变量的表示,支持将整数类型用二进制来表示,以0b开头。所有整数int、short、long、byte都可以用二进制表示// An 8-bit 'byte' v..._jdk 1.8和jdk7

苹果cms在线采集,100多个采集资源接口,可定时采集_cms官方地址影视采集接口-程序员宅基地

文章浏览阅读1.1w次。这是一款苹果v10的采集插件,还可以采集海报,批量搜索,在此分享这个插件下载地址:【蓝奏云】:https://wwa.lanzous.com/iEZBji5xc8b【百度网盘】:https://pan.baidu.com/s/1HGy0kF_A9QS1JLQ-EvH9tg密码:u16j..._cms官方地址影视采集接口

image_transport Documentation_image_transport::camerapublisher-程序员宅基地

文章浏览阅读256次。http://docs.ros.org/api/image_transport/html/Code APIWhen transporting images, you should use image_transport’s classes as drop-in replacements for ros::Publisher and ros::Subscriber.image_transpor..._image_transport::camerapublisher

Phoenix 对HBASE表操作_phoenix column_encoded_bytes=0 的作用-程序员宅基地

文章浏览阅读462次。https://www.yuque.com/docs/share/c0b81507-2318-48a7-a22c-2278b0e82ab9?# 《01.对HBase表操作》_phoenix column_encoded_bytes=0 的作用

基于javaweb+mysql的jsp+servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)-程序员宅基地

文章浏览阅读306次,点赞8次,收藏10次。基于javaweb+mysql的jsp+servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)基于javaweb的JSP+Servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)有了此系统,大大方便了学校疫情的防控工作,加大了学校疫情防控的力度,提高学校疫情防控的效率,尽最大地可能避免学校出现新冠肺炎疫情。课程设计,大作业,毕业设计,项目练习,学习演示等。

「网络安全」SQL注入攻击的真相_1、在网络上找一个网站,研究sql注入攻击的可能性。-程序员宅基地

文章浏览阅读128次。「网络安全」SQL注入攻击的真相_1、在网络上找一个网站,研究sql注入攻击的可能性。

推荐文章

热门文章

相关标签