springboot 启动时间优化

你好呀,我是雨夜。

现在a项目 启动需要140s,2分钟以上了,需要优化

确定原因

使用 Spring Startup Analyzer

可视化 启动时间的分布,发现 @Bean的 初始化占用了 大部分时间

启动耗时分布

  1. @Bean的 扫描放到 ioc中 ,平均MapperFactoryBean 经过 classLoader 一个bean 要200ms左右
  2. @Bean的init方法(比如rpc调用其他项目接口,接口返回慢)
  3. 扫描 多余jar

怎么节省启动时间

针对耗时,有2个办法

  1. 减少@Bean 需要扫描的Class
  2. 减少@Bean 扫描放到ioc的耗时
  3. @Bean 的init 异步化
  4. 降低 rpc等自身调用耗时,优化代码和接口性能
  5. 去掉多余的jar
  6. springboot3 native化,省去了 JVM 加载和字节码运行期预热的时间

针对上面提出的办法 进行调研

减少@Bean 需要扫描的Class

平时写组件的时候 要把需要扫描的bean 通过spring.factories 进行准确指定,现在的问题是通过@SpringBootApplication 的scanBasePackages 进行大范围的扫描,导致扫描了无用的bean,同时要在写业务项目的时候,要在公司 公共的包名后面 添加 业务专属的标识,这样能防止 扫描无用的bean

减少@Bean 扫描放到ioc的耗时

2 org.mybatis.spring.mapper.MapperFactoryBean 生成一个 mapper的代理需要200ms左右,首先需要确定这200ms 都花费在哪,我用的是 arthas

MapperFactoryBean主要分为

  1. 获取 sqlSession
  2. return mapperProxyFactory.newInstance(sqlSession); 生成mapper代理,放到 spring ioc中

但是这里遇到一个问题,arthas 只能trace 一层,不能递归输出下层的细节耗时

@Bean 的init 异步化

这个能提升点性能,目前主要有2种

  1. SOFABoot
  2. spring6.2

SOFABoot 原理

SOFABoot 缺点:

  1. 必须手动指定异步化的Bean,其实手动指定,就已经输了,毕竟难度和体验感都差很多

最近从why哥 那看到spring6.2 已经开发了异步bean,本来以为spring 官方应该就不用手动指定异步化的Bean了,结果编译spring6.2 然后测试了一下,还是需要指定异步的bean

这个能提升启动速度,但是不是重点,先放放

降低 rpc等自身调用耗时,优化代码和接口性能

这个就是根据耗时比较长的,看是哪部分的问题,然后优化性能,如果使用异步,需要防止没加载完成,就被调用的问题

去掉多余的jar

有的jars 没有被使用,而加载了,可能是后面开发的时候 引入的,然后对功能没影响,就没有删除多余的

可以从 Spring Startup Analyzer 中 Unused Jars After Startup 展示了,可以针对性删除

springboot3 native化,省去了 JVM 加载和字节码运行期预热的时间

它是省去了 JVM 加载和字节码运行期预热的时间, 属于把时间花费在 代码编译阶段,后面启动 秒级

而且这是springboot 未来趋势

需要写一个springboot3 高性能基础骨架

过段时间 会发布一个 开源版本,大家可以关注本账号,也可以关注 yuyezhiji (yuyezhiji) (github.com)

本文章没写完,我会在6月10日之前补完

相关推荐
Goboy2 分钟前
夯爆了,我被一个一句话接入的免费可观测平台策反了,那一刻我决定放弃用了3年的Prometheus
后端·docker·kubernetes
回家路上绕了弯41 分钟前
Agent in the Sandbox:当 AI 有了自己的开发环境
后端
陈随易1 小时前
TanStarter,从搭建到支付,一步到位开始赚美元
前端·后端·程序员
Rain的Java大神之路1 小时前
公交App上“还有2站,约5分钟”怎么实现?90%的人答错这道大厂面试题:GPS漂移、ETA不准、10万QPS热点读全拆透(附完整代码)
java·后端·面试
挖掘狂人1 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
后端·sql·mysql
敲代码的小小酥1 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
IT_陈寒1 小时前
Redis开发实战:从入门到精通
前端·人工智能·后端
日日大王学编程2 小时前
2026主流AI Agent产品分类、核心差异与技术特性全解析
人工智能·后端·python
mldong2 小时前
同一个节点接力办几轮,流程才往下走:jeeflow 的后加签
后端·架构
量化分析码农2 小时前
【Python量化多因子实战 03】多因子怎么合成?等权、IC 加权与回归加权实测
后端