今天介绍下,关于如何提高boot项目的启动速度,步骤如下:
将日志级别设置为debug,启动后重点关注以下输出日志内容
=========================
AUTO-CONFIGURATION REPORT
=========================
然后复制 Positive matches 里面所有出现的自动配置对象,删除启动类中的SpringBootApplication注解,改为手动配置,如下:
@Configuration
@Import({
xxAutoConfiguration.class,
})
public class App {
以上步骤操作后,是不是觉得没啥优化空间了,那你就大错特错了,接下来我们可以分析下boot中有多少实现xxRunner接口的类,如果发现该类运行比较耗时,这时候我们就可以下手去优化它,具体分析步骤如下:
- 通过ApplicationContext#getBean(XxRunner.class),就可以知道当前项目中有多少Runner
- 然后监听每个Runner运行过程需要消耗的时长,当然如果通过第一步获取到的Runner很少可以忽略以下步骤
- 将所有的Runner子类的run方法由原来的同步改为异步,这对程序正常运行基本上不会有影响,如果确实需要同步执行的,可以忽略这些特需类
具体如何实现,此处只提供思路,不提供代码,哈哈,很简单利用aop去拦截XxRunner#run方法,然后使用线程池去执行run方法即可
经过以上操作基本上完成大部分优化工作,接下还有没有优化空间,当然有,具体如下:
- 排除项目用多余的依赖jar,具体如何排除可以通过idea中的maven-helper插件去分析jar依赖关系
- 如果项目用到swagger,在生产环境打包时去除swagger所有依赖,因为生产环境根本用不上,swagger生成api接口时需要扫描所有的controller,这是很费时的过程
- 接下来就是整个性能优化,此处就不做说明,如内置tomcat调优或者直接换成undertow,jvm调优等自行百度