SpringBoot | Tomcat启动 SpringBoot项目

article/2025/8/28 2:47:58

Tomcat启动 SpringBoot项目

  • 1. SpringBoot 项目调整
    • 1.1 Pom修改
    • 1.2 修改 启动类
  • 2. 用外部tomcat启动服务注意事项
    • 2.1 失效配置
    • 2.1 * Filter 需要调整
    • 2.3 两种方式启动流程区别 以及失效原因
  • 3. 总结

1. SpringBoot 项目调整

1.1 Pom修改

<!-- 将packaging 打包方式换成 war包-->
<packaging>war </packaging><!-- 将原来的内置tomcat依赖scope改为provided-->
<!-- 内置tomcat -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>

1.2 修改 启动类

@SpringBootApplication
public class Application extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(ZxblogApplication.class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Application.class);}
}

2. 用外部tomcat启动服务注意事项

2.1 失效配置

// 端口失效
server.port=8000      
//文件上传/请求内容 大小失效 需要在tomcat中配置
spring.servlet.multipart.max-file-size=10MB   
spring.servlet.multipart.max-request-size=10MB

2.1 * Filter 需要调整

Filter 依赖属性注入为null
如果项目中使用到Filter 并且有 依赖属性 需要手动注入属性 如下图
在这里插入图片描述
代码

  if (redisService==null) {BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext());redisService =  factory.getBean(RedisService.class);}

Filter 需要实现 init destroy 方法
在使用Filer 的时候还需要注意 实现 init 与 destroy 方法 不然用tomcat 启动会报错 如下入图
在这里插入图片描述

2.3 两种方式启动流程区别 以及失效原因

两种方式启动流程区别:

  • SpringBoot内置Tomcat 启动 jar 包: 执行SpringBootApplication 的run() 方法, 然后启动IOC容器,然后创建嵌入式Servlet 容器。

  • 外部Tomcat 启动 SpringBoot war 包: 先启动创建Servlet 容器,然后再启动SpringBoot应用(SpringBootServletInitializer) ,然后再启动Spring IOC 容器(这里不会在创建Servlet容器)。

详细启动流程区别
SpringBoot内置Tomcat 启动 jar 包: 我们在创建SpringBoot 工程的时候,会以来spring-boot-starter-web,从而可以使用SpringBoot 内置Web容器(默认tomcat),通过分析SpringBoot 启动流程,SpringApplication.run 会打印Banner 后, 通过 createApplicaionContext() 创建 ApplicationContext 容器(Spring IOC 容器),然后通过refreshContext(context) 方法刷新Spring容器,此时会获取嵌入式的Servlet 容器,有容器工厂创建Servlet。也就是以上的 先启动Spring 在 创建Servlet 容器。

外部Tomcat 启动 SpringBoot war 包: 当我们将SpringBoot 项目改造为 Tomcat 启动项目的时候, 会在启动类上 继承SpringBootServletInitializer ,在Tomcat 启动的时候 会执行SpringBootServletInitializer 的 onStartup 方法,然后onStartup方法会通过 createRootApplication 方法来执行 run 方法, 接下来或跟jar包 启动 run 方法的过程一样了, 创建IOC 容器并返回 ,只是 war包形式的应用 在创建IOC 容器的过程中,不会在创建Servlet 容器了。 这也是servlet 配置失效,Filter 属性无法注入的原因

3. 总结

在将SpringBoot 项目改造为可以通过外部Tomcat 启动的后, 我们需要注意 servlet 配置 与Filter 属性注入的失效问题 应该还有其他问题 暂时我还没遇到大家可以多多评论

项目启动后 项目端口不在是你配置的端口 还是会变成8080 还需要加 项目名 才能访问到。

如果对你有帮助,加个关注把~
在这里插入图片描述


http://chatgpt.dhexx.cn/article/FFgAemGP.shtml

相关文章

Tomcat启动路径

对正确启动路径的理解 Tomcat 启动时 会干嘛&#xff1f; 首先在这里设置的 路径 是每次 汤姆猫启动时自动弹出的 页面路径 然后在这里设置的是在汤姆猫的 artifact&#xff08;制品&#xff09;文件夹中会生成的文件夹 只要 这两个地方能够和路径匹配上&#xff0c;每次启动…

Tomcat启动内存设置

Tomcat的启动分为startupo.bat启动和注册为windows服务的启动。 1.startup.bat启动 在tomcat_home/bin目录下找到catalina.bat&#xff0c;用文本编辑器打开&#xff0c;加上下面一行&#xff1a; set JAVA_OPTS -Xms1024M -Xmx1024M -XX:PermSize256M -XX:MaxNewSize256M -…

tomcat启动与关闭

tomcat经过对应版本的下载解压后应该怎样启动呢&#xff1f; 方式1.找到tomcat下的bin目录下的startup.bat文件&#xff0c;双击就可以启动tomcat服务器了 可见小黑窗口中出现了乱码情况&#xff0c;虽然不会对tomcat本身不会产生影响&#xff0c;但是会影响美观&#xff0c;…

Tomcat启动闪退解决方法

一般情况下闪退的原因是java环境变量没有配置正确 具体步骤为计算机→属性→环境变量&#xff0c;然后添加系统变量 这里添加完成JAVA_HOME和JRE_HOME之后记得在path变量值的后面直接追加 【;%JAVA_HOME%;%JRE_HOME%】注意&#xff01;分号是环境变量的分割符号&#xff0c;不…

IDEA tomcat启动项目

1.打开File中Settings 2.搜索Application Servers,添加服务器类型,tomcat,选择本地的tomcat文件位置,点击OK 3.搜索Plugins,在里面搜索tomcat,挑上钩 4.idea打开多个项目 点击idea侧面的Maven,点击加号,找到要添加项目的pom.xml 项目是现成的,省略了文章的第5步 IntelliJ ID…

Tomcat 启动乱码问题

Tomcat启动时会出现乱码的现象&#xff0c;是因为Tomcat默认的编码格式导致的&#xff0c;只需要修改一个配置文件里面的参数即可。 1&#xff1a;找到Tomcat安装目录下的conf文件下面的logging.properties文件&#xff0c;使用编辑器打开来。 2&#xff1a;将里面的属性java.u…

Tomcat启动出现乱码

Tomcat在启动时出现乱码的解决办法 如上图所示&#xff0c;我们在启动tomcat时出现了乱码现象&#xff0c;是由于我们的编码方式导致的&#xff0c;修改如下配置文件即可 将此处的UTF-8改为GBK即可 然后重新启动tomcat 此时发现不存在乱码现象了

查看tomcat启动日志

前言 查看tomcat启动日志需要注意的是看清楚自己的安装目录&#xff0c;不一定是我下面写的。 1、先切换到&#xff1a;cd /usr/local/tomcat/apache-tomcat-8.5.41/logs/ 2、tail -f catalina.out 或者指定查多少行&#xff1a;tail -200 catalina.out 3、tail 命令从指定点…

tomcat启动项目

首先查看tomcat是否启动&#xff1a;winR→cmd→ netstat -ano |findstr "端口号" netstat -ano |findstr "8080" 1、将项目打包成war或jar包放入<webapps>包下 apache-tomcat-9.0.39\webapps 2、启动tomcat<进入tomcat的bin目录下点击startu…

IDEA配置tomcat启动

项目加载到 idea 中后&#xff0c;进行 Tomcat 的配置 首先解决一个问题&#xff08;没有略过&#xff09; 这里我们发现 web 没有小蓝点&#xff0c;说明文件没有被表示为 web 文件 1.打开项目结构 2.找到 modules &#xff0c;添加一个 web 应用之后便可表示为 web 添加…

Tomcat介绍及三种启动方式

一、Tomcat简述 Tomcat是当今世界上使用最为广泛的、开源免费的Servlet/JSP容器&#xff0c;其主要功能是用于发布JavaWeb应用。 二、Tomcat的下载 官方下载网址&#xff1a;http://tomcat.apache.org/ 大家可以更加需要下载自己需要的版本 三、Tomcat的目录说明 下载好tom…

Tomcat -- 启动流程

启动流程 web概念tomcat启动原理启动流程启动源码源码跟踪startup.bat 启动文件catalina.bat (bootstrap.jar)启动入口 Bootstrap.main Bootstrap初始化组件初始化Bootstrap -- bootstrap.init加载Bootstrap -- daemon.load(args)加载Catalina -- Catalina.load初始化Server --…

Tomcat服务器的安装和启动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 安装一、从Tomcat官网下载解压二、Tomcat启动1.启动2.诊断 总结 安装 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 目前Tomcat的最新版本是To…

C++11新特性之nullptr

在C11之前的C98/03我们使用空都是NULL关键字&#xff0c;后来C11之后新增了nullptr关键字来表示空。那么有了NULL还要弄个nullptr出来干什么呢&#xff1f;是不是吃太饱了&#xff1f; 为了来剖析这两者的区别&#xff0c;我们先来看一个什么是野指针&#xff1b; int serven_…

C语言nullptr错误,c/c++中的NULL,nullptr,0

NULL,nullptr与0 0 NULL C语言中 C++中 隐式类型转换 nullptr 预处理中的条件编译语句 0 在我们的程序中,单纯一个0,在不同的类型中有着不同的意思 0,是一个空字符常量,他在ASCII中的序号就是0,是一个字符串的结束标准 ‘0’,表示一个字符0,他在ASCII中的序号是48 “0”…

C语言nullptr错误,C ++中的nullptr到底是什么

对于有经验的C ++和那些了解现代C ++编程语言的人来说,C ++中的nullptr到底是什么,这将是非常简单的问题。但是nullptr不仅是C ++中的编程语言,而且为了解释这一点,我们先了解一下NULL的问题,然后我们将深入研究nullptr的简单实现以及nullptr的一些用例。为什么我们需要nu…

C++中NULL和nullptr的区别

在编写C程序的时候只看到过NULL&#xff0c;而在C的编程中&#xff0c;我们可以看到NULL和nullptr两种关键字&#xff0c;其实nullptr是C11版本中新加入的&#xff0c;它的出现是为了解决NULL表示空指针在C中具有二义性的问题&#xff0c;为了弄明白这个问题&#xff0c;我查找…

C++11中的nullptr

一、什么是nullptr&#xff1f; nullptr是c11的空指针&#xff0c;可以理解为 NULL的升级版。 二、解决什么问题&#xff1f; 首先&#xff0c;在C语言中&#xff0c;NULL是被定义成这样的#define NULL ((void *)0)。 而C中&#xff0c;NULL是被定义成这样#define NULL 0。 …

C++基础:指针空值(nullptr)

初始化指针是将其指向一个“空”位置&#xff0c;比如0。由于大多数计算机系统不允许用户程序写地址为0的内存空间&#xff0c;倘若程序无意中对该指针所指地址赋值&#xff0c;通常在运行时就会导致程序退出。虽然程序退出并非什么好事&#xff0c;但这样一来错误也容易被程序…

【Kafka】消息的同步发送和异步发送

文章目录 概述1. sync vs async1.1 java代码同步和异步 2. 可靠性机制(ack属性配置)2.1 oneway 3. 一般配置4. 同步异步和ack的联系和区别参考 概述 kafka有同步&#xff08;sync&#xff09;、异步&#xff08;async&#xff09;以及oneway这三种发送方式&#xff0c;某些概念…