文章目录
公司 SpringBoot 项目在日常开发过程中发现服务启动过程异常缓慢,常常需要 6-7 分钟才能暴露端口,严重降低开发效率。通过 SpringBoot 的 SpringApplicationRunListener 、BeanPostProcessor 原理和源码调试等手段排查发现,在 Bean 扫描和 Bean 注入这个两个阶段有很大的性能瓶颈。
通过 JavaConfig 注册 Bean, 减少 SpringBoot 的扫描路径,同时基于 Springboot 自动配置原理对第三方依赖优化改造,将服务本地启动时间从 7min 降至 40s 左右的过程。 本文会涉及以下知识点:
- 基于 SpringApplicationRunListener 原理观察 SpringBoot 启动 run 方法;
- 基于 BeanPostProcessor 原理监控 Bean 注入耗时;
- SpringBoot Cache 自动化配置原理;
- SpringBoot 自动化配置原理及 starter 改造;
1 耗时问题排查
SpringBoot 服务启动耗时排查,目前有 2 个思路:
- 排查 SpringBoot 服务的启动过程;
- 排查 Bean 的初始化耗时;