news 2026/5/21 3:30: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/5/20 3:41:36

基于单片机的立体车库设计

一、系统设计背景与总体架构 随着城市汽车保有量激增&#xff0c;传统平面车库土地利用率低、停车难问题日益突出&#xff0c;立体车库凭借空间利用率高、占地面积小的优势成为解决方案。基于单片机的立体车库设计&#xff0c;以低成本、高可靠性为核心目标&#xff0c;采用模块…

作者头像 李华
网站建设 2026/5/16 14:59:29

【Matlab】《卡尔曼滤波与组合导航》 第一次作业 基于KF的GPS静态/动态滤波

首先,我将向您展示一个简单的MATLAB示例,演示如何使用卡尔曼滤波器进行GPS静态/动态滤波。这个示例将使用MATLAB内置的ekf函数,这是一个扩展卡尔曼滤波器(Extended Kalman Filter,EKF)。 首先,我们将生成一个简单的模拟数据集,以模拟GPS接收器的输出。然后,我们将使用…

作者头像 李华
网站建设 2026/5/19 6:44:46

CSF文化会办公集成与商用设备板块:驱动行业未来的核心引擎

在大众熟知的办公用品行业&#xff0c;一场深刻的变革正悄然兴起。行业不仅面临着技术迭代的冲击&#xff0c;还需应对工作方式和应用场景持续创新带来的全新挑战。作为典型的“小商品、大市场”领域&#xff0c;办公用品行业近年来受益于庞大的市场规模和稳步增长&#xff0c;…

作者头像 李华
网站建设 2026/5/20 22:09:48

【Symfony 8请求拦截器深度指南】:掌握高效请求处理的5大核心技巧

第一章&#xff1a;Symfony 8请求拦截器概述Symfony 8 引入了全新的请求拦截器机制&#xff0c;作为处理 HTTP 请求生命周期中关键环节的现代化解决方案。该机制允许开发者在控制器执行前后注入自定义逻辑&#xff0c;实现如权限校验、日志记录、请求转换等横切关注点&#xff…

作者头像 李华
网站建设 2026/5/16 20:18:15

农业物联网设备身份伪造危机(PHP认证机制深度剖析)

第一章&#xff1a;农业物联网设备身份伪造危机概述随着智慧农业的快速发展&#xff0c;农业物联网&#xff08;Agri-IoT&#xff09;设备被广泛应用于土壤监测、灌溉控制、牲畜追踪等场景。这些设备通过无线网络与云端平台通信&#xff0c;实现数据自动化采集与远程管理。然而…

作者头像 李华
网站建设 2026/5/20 5:33:44

Python+Selenium+Pytest+POM自动化测试框架封装

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快1、测试框架简介1&#xff09;测试框架的优点代码复用率高&#xff0c;如果不使用框架的话&#xff0c;代码会显得很冗余。可以组装日志、报告、邮件等一些高级功能…

作者头像 李华