news 2026/6/23 17:25:54

SpringBoot启动太慢?几个优化技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot启动太慢?几个优化技巧

SpringBoot启动太慢?几个优化技巧

项目越做越大,SpringBoot启动时间从几秒变成了30多秒。

改一行代码等半分钟,效率太低了。今天分享几个优化技巧,亲测有效。

先找到慢在哪

优化之前,先看看时间花在哪了。

SpringBoot 2.4以上可以开启启动分析:

@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplicationapp=newSpringApplication(Application.class);app.setApplicationStartup(newBufferingApplicationStartup(2048));app.run(args);}}

启动后访问/actuator/startup就能看到每个步骤的耗时。

常见的耗时大户:

  • 包扫描范围太大
  • 自动配置太多
  • 数据源初始化
  • MyBatis Mapper扫描

优化1:缩小包扫描范围

// 优化前:扫描整个包@SpringBootApplicationpublicclassApplication{}// 优化后:只扫描需要的包@SpringBootApplication(scanBasePackages={"com.example.controller","com.example.service","com.example.config"})publicclassApplication{}

包越少,扫描越快。

优化2:排除不需要的自动配置

SpringBoot会自动配置很多东西,但不是都用得上:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,// 不用数据库时RedisAutoConfiguration.class,// 不用Redis时MongoAutoConfiguration.class,// 不用MongoDB时})publicclassApplication{}

或者在配置文件里排除:

spring:autoconfigure:exclude:-org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

优化3:延迟初始化

spring:main:lazy-initialization:true

Bean在第一次使用时才初始化,不是启动时全部初始化。

注意:第一次请求会变慢,生产环境慎用,开发环境很适合。

优化4:优化MyBatis配置

mybatis:configuration:lazy-loading-enabled:truemapper-locations:classpath:mapper/*.xml# 精确指定,不要用**

Mapper接口用@Mapper注解代替包扫描:

// 不推荐@MapperScan("com.example")// 推荐@MapperpublicinterfaceUserMapper{}

优化5:关闭开发环境不需要的功能

spring:profiles:active:dev---spring:config:activate:on-profile:dev# 开发环境关闭一些功能springdoc:api-docs:enabled:falsemanagement:endpoint:health:show-details:never

优化6:JVM参数

开发环境追求启动快,可以加这些参数:

java -XX:TieredStopAtLevel=1\-noverify\-Dspring.jmx.enabled=false\-jar app.jar
  • -XX:TieredStopAtLevel=1只用C1编译,启动更快
  • -noverify跳过字节码验证
  • -Dspring.jmx.enabled=false关闭JMX

大约能提升20%左右。

优化7:使用DevTools热重载

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency>

改代码后不用完全重启,只重新加载变化的部分,几秒就能生效。

优化效果

优化项优化前优化后
缩小包扫描30s27s
排除自动配置27s20s
延迟初始化20s12s
JVM参数12s10s
DevTools10s3s

从30秒到3秒,效率提升10倍。

开发vs生产

开发环境:追求启动快

spring:main:lazy-initialization:true

生产环境:追求运行时性能

spring:main:lazy-initialization:false

可以用不同的配置文件区分。

远程调试

有时候需要连测试环境的数据库调试,本地配置改成测试环境的地址就行:

spring:datasource:url:jdbc:mysql://测试环境IP:3306/testdb

我用星空组网把本地电脑和测试环境连起来,配置文件写虚拟IP就能直接连,不用部署到服务器上调试,启动优化效果也能立刻验证。

小结

启动优化的核心思路:少加载、晚加载

  1. 缩小包扫描范围
  2. 排除不需要的自动配置
  3. 延迟初始化(开发环境)
  4. 用DevTools热重载
  5. JVM用快速启动参数

先从最简单的开始试,效果立竿见影。

有问题评论区交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 1:00:49

基于单片机的视力保护器设计

一、系统设计背景与总体架构 随着电子设备普及&#xff0c;青少年近视率逐年攀升&#xff0c;长时间近距离用眼、不良光照环境是主要诱因。传统视力保护手段依赖人工提醒&#xff0c;缺乏实时性与准确性。基于单片机的视力保护器&#xff0c;能自动监测用眼环境并及时干预&…

作者头像 李华
网站建设 2026/6/23 1:18:43

WebSocket 协议详解:ws 和 wss 的区别与应用

WebSocket 协议详解&#xff1a;ws 和 wss 的区别与应用 WebSocket 是一种全双工通信协议&#xff0c;允许客户端和服务器之间建立持久的双向通信连接。它是 HTML5 标准的一部分&#xff0c;旨在解决传统 HTTP 协议在实时通信中的局限性。本文将详细介绍 WebSocket 的工作原理…

作者头像 李华
网站建设 2026/6/23 18:33:35

【Matlab】基于图像处理的苹果质量检测分级系统

苹果质量检测分级系统可以利用图像处理技术来实现。下面是一个简单的基于MATLAB的示例代码,用于检测苹果的质量并对其进行分级。 % 读取苹果图像 appleImage = imread(apple.jpg);% 转换为灰度图像 grayImage = rgb2gray(appleImage);% 对图像进行平滑处理,减少噪音 smoothe…

作者头像 李华
网站建设 2026/6/23 9:07:21

从零构建高质量纹理管线:5个专业团队都在用的行业标准流程

第一章&#xff1a;从零构建高质量纹理管线在现代图形渲染中&#xff0c;纹理是赋予3D模型真实感的关键元素。构建一条高效且可扩展的纹理处理管线&#xff0c;不仅能提升视觉质量&#xff0c;还能优化资源加载与内存占用。纹理格式的选择 不同的应用场景需要权衡压缩比、画质和…

作者头像 李华
网站建设 2026/6/23 18:33:22

【紧急避坑】:低代码项目中事件冒泡失控的6大诱因及应对策略

第一章&#xff1a;低代码组件的事件概述在低代码开发平台中&#xff0c;组件事件是实现用户交互与业务逻辑联动的核心机制。通过监听和响应用户操作&#xff08;如点击、输入、选择等&#xff09;&#xff0c;开发者可以在无需编写大量前端代码的前提下&#xff0c;构建动态且…

作者头像 李华
网站建设 2026/6/23 16:49:21

【低代码PHP组件更新机制揭秘】:掌握高效迭代的5大核心策略

第一章&#xff1a;低代码PHP组件更新机制的核心价值在现代Web开发中&#xff0c;低代码平台通过可视化配置和模块化设计显著提升了开发效率。其中&#xff0c;PHP作为广泛使用的服务端语言&#xff0c;其组件的更新机制在低代码环境中扮演着关键角色。高效的更新机制不仅保障了…

作者头像 李华