news 2026/9/2 22:38:45

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/9/2 21:00:48

第五章:Makefile条件判断 - 智能构建的核心

第五章&#xff1a;Makefile条件判断 - 智能构建的核心 5.1 条件判断有什么用&#xff1f; 一个Makefile适应所有情况&#xff1a;开发环境&#xff1a;调试信息&#xff0c;不优化生产环境&#xff1a;最大优化&#xff0c;无调试Windows/Linux&#xff1a;自动适应有…

作者头像 李华
网站建设 2026/9/3 0:51:25

低代码PHP组件版本冲突如何破局?3个关键步骤让你无缝升级

第一章&#xff1a;低代码PHP组件的版本兼容在构建现代Web应用时&#xff0c;低代码平台常依赖于可复用的PHP组件来加速开发流程。然而&#xff0c;不同PHP版本之间的语法与函数行为差异可能导致组件运行异常。确保组件在多种PHP环境中稳定运行&#xff0c;是保障系统兼容性的关…

作者头像 李华
网站建设 2026/9/2 15:14:30

旋转矩阵与欧拉角转换数学公式与代码详解

下面分三大部分说明&#xff1a; 数学推导与公式&#xff08;欧拉角 ↔ 四元数&#xff09;C 实现代码Python 实现代码 为便于说明&#xff0c;统一采用常用的航空/机器人学约定&#xff1a; 欧拉角顺序&#xff1a;Z-Y-X&#xff08;yaw-pitch-roll&#xff09;旋转顺序&#…

作者头像 李华
网站建设 2026/9/2 23:51:50

助力在线教学提质增效,“魔果云课”以核心功能直击教师痛点

随着在线教育的普及&#xff0c;一款稳定、高效、易用的教学工具已成为广大教师的普遍需求。近期&#xff0c;一款名为「魔果云课」的软件因其聚焦核心教学场景的设计&#xff0c;受到了不少教育工作者的关注。本文将从实际应用角度&#xff0c;梳理其如何针对线上教学关键环节…

作者头像 李华
网站建设 2026/9/2 8:20:54

从卡顿到秒级响应,农业传感器PHP数据写入优化全解析

第一章&#xff1a;从卡顿到秒级响应&#xff0c;农业传感器PHP数据写入优化全解析在现代农业物联网系统中&#xff0c;成百上千的传感器实时采集温湿度、土壤pH值、光照强度等关键数据&#xff0c;这些数据通常通过HTTP接口由PHP后端接收并写入数据库。然而&#xff0c;原始实…

作者头像 李华