当前位置: 首页 > news >正文

Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南

文章目录

    • 引言
    • 一、嵌入式服务器核心原理
      • 1.1 架构设计特点
      • 1.2 主流服务器对比
    • 二、嵌入式服务器配置实战
      • 2.1 基础配置模板
      • 2.2 HTTPS安全配置
    • 三、高级调优策略
      • 3.1 线程池优化(Tomcat示例)
      • 3.2 响应压缩配置
      • 3.3 访问日志配置
    • 四、服务器切换实战
      • 4.1 切换至Undertow服务器
      • 4.2 Undertow性能优化配置
    • 五、容器健康监控
      • 5.1 Actuator端点监控
      • 5.2 可视化监控方案
    • 六、生产环境最佳实践
    • 七、常见问题排查指南
      • 7.1 端口冲突问题
      • 7.2 内存泄漏检测
    • 总结

引言

在传统Java Web开发中,部署WAR包到外部Web服务器的流程复杂且低效。Spring Boot通过**嵌入式服务器(Embedded Server)**机制彻底改变了这一现状,使得应用打包即包含完整运行时环境。本文将深入剖析Spring Boot嵌入式服务器的技术原理,并通过实战案例演示各种进阶配置技巧。


一、嵌入式服务器核心原理

1.1 架构设计特点

  • 无外部依赖:将Servlet容器(Tomcat/Jetty/Undertow)作为应用依赖打包
  • 即插即用:通过starter依赖自动装配服务器实例
  • 统一生命周期:应用启动时自动初始化服务器

1.2 主流服务器对比

特性TomcatJettyUndertow
默认版本10.x11.x2.x
内存占用中等较低最低
吞吐量优秀良好卓越
异步支持Servlet 3.1+原生异步IO基于XNIO
WebSocket性能标准实现高性能最佳性能
适用场景传统Web应用高并发长连接资源敏感型应用

二、嵌入式服务器配置实战

2.1 基础配置模板

# application.properties# 服务器基础配置
server.port=8080
server.servlet.context-path=/api
server.connection-timeout=30s# Tomcat专属配置
server.tomcat.max-threads=200
server.tomcat.accept-count=100
server.tomcat.uri-encoding=UTF-8# Undertow专属配置
server.undertow.io-threads=16
server.undertow.worker-threads=64

2.2 HTTPS安全配置

@Bean
public ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();factory.addAdditionalTomcatConnectors(createSslConnector());return factory;
}private Connector createSslConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();try {File keystore = new ClassPathResource("keystore.jks").getFile();connector.setScheme("https");connector.setSecure(true);connector.setPort(8443);protocol.setSSLEnabled(true);protocol.setKeystoreFile(keystore.getAbsolutePath());protocol.setKeystorePass("changeit");protocol.setKeyAlias("tomcat");return connector;} catch (Exception ex) {throw new IllegalStateException("SSL配置失败", ex);}
}

三、高级调优策略

3.1 线程池优化(Tomcat示例)

# application.yml
server:tomcat:threads:max: 500          # 最大工作线程数min-spare: 50     # 最小空闲线程connection-timeout: 5000msmax-connections: 10000accept-count: 500   # 等待队列长度

3.2 响应压缩配置

# 启用GZIP压缩
server.compression.enabled=true
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/json
server.compression.min-response-size=1024

3.3 访问日志配置

@Bean
public TomcatServletWebServerFactory tomcatFactory() {return new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {AccessLogValve valve = new AccessLogValve();valve.setPattern("%t %a %r %s (%D ms)");valve.setDirectory("logs");valve.setSuffix(".access.log");context.getPipeline().addValve(valve);}};
}

四、服务器切换实战

4.1 切换至Undertow服务器

<!-- pom.xml -->
<dependencies><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>
</dependencies>

4.2 Undertow性能优化配置

# Undertow高级参数
server.undertow.buffer-size=1024
server.undertow.direct-buffers=true
server.undertow.eager-filter-init=true
server.undertow.max-http-post-size=10MB

五、容器健康监控

5.1 Actuator端点监控

# 启用健康检查端点
management.endpoints.web.exposure.include=health,metrics
management.endpoint.health.show-details=always# 自定义健康指标
@Component
public class ServerHealthIndicator implements HealthIndicator {@Overridepublic Health health() {// 检查服务器状态return Health.up().withDetail("activeSessions", 42).build();}
}

5.2 可视化监控方案

@Bean
public MeterRegistryCustomizer<PrometheusMeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("application", "spring-boot-server","container", "embedded-tomcat");
}

六、生产环境最佳实践

  1. 内存限制策略
    JVM参数建议配置:

    -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m
    
  2. 优雅停机配置

    server.shutdown=graceful
    spring.lifecycle.timeout-per-shutdown-phase=30s
    
  3. 连接池优化

    spring:datasource:hikari:maximum-pool-size: 20connection-timeout: 30000idle-timeout: 600000
    
  4. 容器版本管理
    在pom.xml中显式指定容器版本:

    <properties><tomcat.version>10.0.27</tomcat.version>
    </properties>
    

七、常见问题排查指南

7.1 端口冲突问题

# Linux/Mac查询端口占用
lsof -i :8080# Windows查询端口占用
netstat -ano | findstr :8080

7.2 内存泄漏检测

@RestController
public class MemDebugController {@GetMapping("/heapdump")public void getHeapDump(HttpServletResponse response) throws IOException {HeapDumper.dumpHeap("heap.hprof", true);FileCopyUtils.copy(new FileInputStream("heap.hprof"), response.getOutputStream());}
}

总结

Spring Boot嵌入式服务器的优势:

  • 部署效率提升:单JAR包部署,无需安装Web服务器
  • 资源利用率优化:根据应用需求选择最佳容器
  • 快速水平扩展:天然适合容器化部署
  • 配置灵活性:细粒度的性能调优参数

相关文章:

Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南

文章目录 引言一、嵌入式服务器核心原理1.1 架构设计特点1.2 主流服务器对比 二、嵌入式服务器配置实战2.1 基础配置模板2.2 HTTPS安全配置 三、高级调优策略3.1 线程池优化&#xff08;Tomcat示例&#xff09;3.2 响应压缩配置3.3 访问日志配置 四、服务器切换实战4.1 切换至U…...

深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)

本文以https://example.com为例&#xff0c;逐层剖析浏览器从输入URL到页面渲染的完整链路&#xff0c;涵盖DNS解析、TCP/TLS握手、HTTP请求、DOM/CSSOM构建等核心阶段&#xff0c;结合代码示例与性能调优技巧&#xff0c;助你掌握浏览器底层运行机制。 一、导航阶段&#xff1…...

【网络安全】常见的web攻击

1、SQL注入攻击 定义&#xff1a; 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;当服务器利用参数构建SQL语句的时候&#xff0c;恶意的SQL代码被一起构建,并在数据库中执行。 示例&#xff1a; 用户登录&#xff1a; 输入用户名xx&#xff0c; 密码 or 1 …...

MySQL面试学习

MySQL 1.事务 事务的4大特性 事务4大特性&#xff1a;原子性、一致性、隔离性、持久性 原⼦性&#xff1a; 事务是最⼩的执⾏单位&#xff0c;不允许分割。事务的原⼦性确保动作要么全部完成&#xff0c;要么全不执行一致性&#xff1a; 执⾏事务前后&#xff0c;数据保持⼀…...

一文读懂Docker之Docker Compose

目录 一、Docker Compose简介 二、Docker Compose的安装和基本使用 1、Docker Compose的安装 步骤一、下载docker-compose 步骤二、新增可执行权限 步骤三、查看是否安装成功 2、Docker Compose的基本使用 (1)、docker-compose up (2)、docker-compose ps (3)、docke…...

escape SQL中用法

select * from tablename where username like %#%% escape # 这个的意思就是&#xff0c;escape指定字符#&#xff0c;#字符后面的第一个字符被认为是普通字符 查询示例2 查询username字段中包含[的数据也是一样&#xff0c;即&#xff1a; select * from tablename where us…...

Cherno C++ P57 Standard array处理静态数组

这篇文章当中我们讲一下如何使用C自带的standard array来处理静态数组。 首先什么是静态数组&#xff0c;静态数组通常指的是不会增长的数据&#xff0c;长度是已经确定了的。我们在定义数组的时候就必须确定好长度与类型。 其次C当中也确实给我们提供了一些可以用来处理静态…...

linux学习【7】Sourc Insight 4.0设置+操作

目录 1.Source Insight是什么&#xff1f;2.需要哪些配置&#xff1f;3.怎么新建项目4.一些问题的解决1.中文乱码问题 5.常规使用1. 在工程中打开文件2. 在文件中查看函数或变量的定义3. 查找函数或变量的引用4. 快捷键 按照这个设置就可以了&#xff0c;下面的设置会标明设置理…...

JDK、Hadoop下载地址

一、Oracle JDK https://www.oracle.com/java/technologies/downloads/ 刚进去是最新的版本&#xff0c;往下滑可以看到老版本 二、Open JDK的 Azul Zulu https://www.azul.com/downloads/ 直接可以选版本等选项卡 三、Hadoop Apache Download Mirrors...

【小白向超详细】使用 VSCode 远程连接 Linux 服务器详细教程

使用 VSCode 远程连接 Linux 服务器详细教程 前提条件 已安装 VSCode。已在 VSCode 中安装 Remote - SSH 插件。目标 Linux 服务器 开启了 SSH 服务&#xff0c;并可以通过 SSH 访问。本地电脑已安装 SSH 客户端&#xff08;Linux 和 macOS 自带&#xff0c;Windows 用户可以…...

设计心得——解耦的实现技术

一、说明 在前面的“设计心得——解耦”中&#xff0c;对解耦进行了高层次的抽象说明。本篇则对在实践中常用的解耦技术进行逐一分析说明&#xff0c;以期为开发者能更从理论到实践搭建一个桥梁。至于大家能够如何更好的在自己的项目中进行解耦的实践&#xff0c;就需要不断的…...

计算机毕业设计SpringBoot+Vue.jst在线文档管理系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章&#xff0c;为正式安装windowsUbuntu16.04双系统部分。在正式安装前&#xff0c;若还没有进行前期准备工作&#xff08;1.分区2.制作启动u盘&#xff09;&#xff0c;见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …...

一文讲解Redis为什么读写性能高以及I/O复用相关知识点

Redis为什么读写性能高呢&#xff1f; Redis 的速度⾮常快&#xff0c;单机的 Redis 就可以⽀撑每秒十几万的并发&#xff0c;性能是 MySQL 的⼏⼗倍。原因主要有⼏点&#xff1a; ①、基于内存的数据存储&#xff0c;Redis 将数据存储在内存当中&#xff0c;使得数据的读写操…...

TPU(Tensor Processing Unit)详解

一、什么是TPU&#xff1f; TPU&#xff08;Tensor Processing Unit&#xff0c;张量处理器&#xff09;是谷歌专门为机器学习任务设计的定制化ASIC芯片&#xff0c;旨在加速神经网络训练与推理。其核心目标是针对矩阵运算&#xff08;如矩阵乘加&#xff09;优化硬件架构&…...

Ubuntu20.04.2安装Vmware tools

软件版本&#xff1a;Vmware Workstation Pro 17.6.2 操作系统镜像文件&#xff1a;ubuntu-20.04.2-desktop-amd64 方式1&#xff1a;用iso镜像安装 没用这种方法&#xff0c;太麻烦 方式2&#xff1a;用apt安装Open VM Tools 如果你使用的是较新的Ubuntu版本&#xff08;如…...

检测服务端口是否开放的常用方法

检测服务端口是否开放的常用方法 文章目录 检测服务端口是否开放的常用方法背景使用nc命令使用 telnet 命令使用 curl 命令使用 openssl 命令使用 Python 脚本,socket连接使用 bash 内建命令:使用 nmap:总结 背景 有时候需要测试网络是否连通&#xff0c;端口是否开放&#xf…...

muduo源码阅读:socket常见操作及一些补充

TCP连接和释放 一个典型的TCP连接、通信过程&#xff1a; &#xff08;假设有资源的一端是服务器端&#xff09; 服务器会启用一个监听循环&#xff0c;不断接受client连接请求(三次握手建立连接), 进行数据通信&#xff0c;通信完成以后断开连接(四次挥手断开连接)。 对于…...

虚拟表格实现全解析

在数据展示越来越复杂的今天&#xff0c;大量数据的渲染就像是“满汉全席”——如果把所有菜肴一次性摆上桌&#xff0c;既浪费资源也让人眼花缭乱。幸运的是&#xff0c;我们有两种选择&#xff1a; 自己动手&#xff1a;通过二次封装 Element Plus 的表格组件&#xff0c;实…...

使用 Grafana 监控 Spring Boot 应用

随着软件开发领域的不断发展&#xff0c;监控和可观测性已成为确保系统可靠性和性能的关键实践。Grafana 是一个功能强大的开源工具&#xff0c;能够为来自各种来源的监控数据提供丰富的可视化功能。在本篇博客中&#xff0c;我们将探讨如何将 Grafana 与 Spring Boot 应用程序…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...