返回

关于SpringBoot启动优化实践的经历分享

后端

简介

SpringBoot作为当下热门的Java框架,因其极简易用的特点获得了众多开发者的青睐。不过作为新手,启动慢一直是困扰我的大问题。
上个月公司开源了一个关于Java应用通过基础设施于工具的改进,实现从构建到启动全方面提速的小册,其中一些实践,用在SpringBoot上效果也很棒。
今天我就结合小册中的优化经验对我目前项目启动慢的情况进行优化实践,欢迎阅读。
背景
最近看到一本关于 Java 应用通过基础设施于工具的改进,实现从构建到启动全方面提速的小册。想着自己目前在做的项目最让我觉得不爽的就是项目启动。尤其是需要频繁改代码,频繁重启项目的时候,每次项目启动都需要将近一分钟的时间,还要等好几分钟才能真正跑到主页面,这个等待的过程真的令人痛苦。所以我决心必须优化一下启动慢的问题。

SpringBoot启动优化实践
说干就干,我从这本小册子中了解到了一些关于 SpringBoot 启动优化的技巧,包括使用 JMH 进行基准测试、使用 G1 垃圾收集器、使用代码热替换以及重新定义 Spring Boot 启动顺序等。

1. 使用 JMH 进行基准测试
首先,我使用 JMH 进行基准测试,以了解我的应用程序在启动时需要多长时间。测试结果显示,我的应用程序在没有进行任何优化的情况下,启动时间为 89.6 秒。

2. 使用 G1 垃圾收集器
接下来,我将 Java 虚拟机的垃圾收集器从默认的 Parallel GC 切换到了 G1 GC。G1 GC 是一种并发的垃圾收集器,可以在应用程序运行时执行垃圾收集,从而减少应用程序的启动时间。切换到 G1 GC 后,我的应用程序的启动时间减少到了 68.3 秒,提升了 23.8%。

3. 使用代码热替换
代码热替换是一种技术,它允许在应用程序运行时替换类文件,而无需重新启动应用程序。这可以大大减少应用程序的启动时间,尤其是在需要频繁改动代码的情况下。我在我的应用程序中启用了代码热替换,这使得我的应用程序的启动时间进一步减少到了 56.2 秒,提升了 17.7%。

4. 重新定义 Spring Boot 启动顺序
最后,我重新定义了 Spring Boot 的启动顺序,以便先初始化数据源。这可以避免应用程序在启动时等待数据源初始化完成,从而减少应用程序的启动时间。重新定义启动顺序后,我的应用程序的启动时间进一步减少到了 42.1 秒,提升了 25.1%。

优化效果
经过以上一系列的优化,我的应用程序的启动时间从最初的 89.6 秒减少到了 42.1 秒,提升了 53.1%。这个优化效果还是非常明显的,尤其是当我需要频繁改动代码的时候,这个优化带来的好处就更加明显了。

总结
通过这次 SpringBoot 启动优化的实践,我学到了很多关于 SpringBoot 启动优化的知识,也掌握了一些实用的优化技巧。这些技巧不仅可以用于优化 SpringBoot 的启动时间,还可以用于优化其他 Java 应用的启动时间。希望这篇文章能对大家有所帮助。