当前位置: 代码网 > it编程>编程语言>Java > SpringBoot启动太慢的7个优化技巧

SpringBoot启动太慢的7个优化技巧

2025年12月25日 Java 我要评论
springboot启动太慢?几个优化技巧项目越做越大,springboot启动时间从几秒变成了30多秒。改一行代码等半分钟,效率太低了。今天分享几个优化技巧,亲测有效。先找到慢在哪优化之前,先看看时

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

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

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

先找到慢在哪

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

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

@springbootapplication
public class application {
    public static void main(string[] args) {
        springapplication app = new springapplication(application.class);
        app.setapplicationstartup(new bufferingapplicationstartup(2048));
        app.run(args);
    }
}

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

常见的耗时大户:

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

优化1:缩小包扫描范围

// 优化前:扫描整个包
@springbootapplication
public class application {}

// 优化后:只扫描需要的包
@springbootapplication(scanbasepackages = {
    "com.example.controller",
    "com.example.service",
    "com.example.config"
})
public class application {}

包越少,扫描越快。

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

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

@springbootapplication(exclude = {
    datasourceautoconfiguration.class,  // 不用数据库时
    redisautoconfiguration.class,        // 不用redis时
    mongoautoconfiguration.class,        // 不用mongodb时
})
public class application {}

或者在配置文件里排除:

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

优化3:延迟初始化

spring:
  main:
    lazy-initialization: true

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

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

优化4:优化mybatis配置

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

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

// 不推荐
@mapperscan("com.example")

// 推荐
@mapper
public interface usermapper {}

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

spring:
  profiles:
    active: dev

---
spring:
  config:
    activate:
      on-profile: dev
      
# 开发环境关闭一些功能
springdoc:
  api-docs:
    enabled: false

management:
  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就能直接连,不用部署到服务器上调试,启动优化效果也能立刻验证。

小结

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

  • 缩小包扫描范围
  • 排除不需要的自动配置
  • 延迟初始化(开发环境)
  • 用devtools热重载
  • jvm用快速启动参数

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

到此这篇关于springboot启动太慢的7个优化技巧的文章就介绍到这了,更多相关springboot启动优化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com