news 2026/3/1 20:57:46

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/2/21 7:12:31

Cox回归分析效率提升3倍,R语言高级建模技巧大公开

第一章&#xff1a;临床数据的 R 语言 Cox 回归优化在处理生存分析问题时&#xff0c;Cox 比例风险模型是临床研究中广泛应用的统计方法。它能够评估多个协变量对生存时间的影响&#xff0c;同时无需假设基础风险函数的具体形式。利用 R 语言中的 survival 包&#xff0c;可以高…

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

【渲染的抗锯齿终极指南】:揭秘图像锯齿根源与5种高效解决方案

第一章&#xff1a;渲染的抗锯齿在计算机图形学中&#xff0c;抗锯齿&#xff08;Anti-Aliasing&#xff09;是提升图像视觉质量的关键技术之一。由于数字图像由离散像素构成&#xff0c;在渲染斜线或曲线边缘时容易出现阶梯状的“锯齿”现象。抗锯齿通过平滑这些边缘&#xff…

作者头像 李华
网站建设 2026/2/28 2:26:33

【医疗行业数据防护】:满足HIPAA合规要求的5大技术控制措施

第一章&#xff1a;医疗数据的 HIPAA 合规概述在医疗信息化快速发展的背景下&#xff0c;保护患者隐私和确保数据安全成为核心议题。HIPAA&#xff08;Health Insurance Portability and Accountability Act&#xff09;作为美国医疗数据保护的基石性法规&#xff0c;为个人健康…

作者头像 李华
网站建设 2026/2/25 5:55:37

为什么你的低代码PHP系统总被越权?5大核心校验机制必须掌握

第一章&#xff1a;为什么你的低代码PHP系统总被越权&#xff1f;在低代码开发盛行的今天&#xff0c;许多PHP系统通过可视化拖拽快速构建业务模块&#xff0c;但随之而来的安全问题日益突出&#xff0c;尤其是越权访问。开发者往往误以为“功能上线即安全”&#xff0c;却忽略…

作者头像 李华