SpringBoot启动速度慢的原因总结
现在spring boot的架构可以说是⾮常流⾏,不会你都不好意思说你是做java的。可是它⽕归⽕,也有⼀些⼩问题需要咱们去注意。
如果是单体项⽬,并且在启动速度⽅⾯没有任何要求,那么请忽略。
下⾯进⼊主题,在什么情况下spring boot的项⽬启动会变慢呢
前提条件
启动项⽬的机器硬件配置不能拖后腿,否则你说项⽬启动慢,项⽬还觉得机器不⾏呢…
⽐如⽹络,内存⼤⼩,CPU核⼼数等,不要求太⾼,⾄少也要够⽤吧
抛开各种⼈为因素,例如各种连接时间较长,其他组件启动较慢导致等待…
原因⼀
项⽬中使⽤的⽆⽤配置太多。例如在⼀个最简单的web中,你还加⼊了其他各种maven配置,并且将他们配置到项⽬中(只是⽐较夸张的例⼦,这些配置加⼊都不⽤),然后项⽬本⾝也不懂,既然你配置了,
springboot是啥那就加载呗。⼀个花0.1秒,10个就1秒,100个就10秒了…以此类推,这⼀点就是最容易想明⽩的地⽅了。
原因⼆
spring boot的⾃动配置。⾃动配置是spring boot的⼀个特⾊,但是也是它启动慢的⼀个弊病。没办法,通常好⽤功能全的东西,总会在⼀些地⽅上有缺陷。上⾯说到⽆⽤的配置多,这⾥要说的就是spring boot它⾃⼰装配的东西太多。你可以看到在spring boot的相关jar包⾥,都存放着spring.factories的⽂件,进去⼀看,⼤部分都是写了很多的类,它是实现spring boot⾃动装配的核⼼之⼀。但是你仔细观察会发现,其实有很多类,你可能完全不⽤。但有什么办法呢,不管你⽤不⽤,⾄少它都会给你检查⼀遍,这不也是花时间的地⽅吗?
原因三
项⽬精简程度不够。现在⽐较流⾏微服务的概念,我认为它的概念核⼼含义即为精简,单⼀,并且多数需要强调启动速度的地⽅也多是出⾃微服务的项⽬中。⼀个微服务项⽬中,最好是在10秒以内能够启动完毕。但是多数是做不到的,原因在于项⽬拆分的还不够细。你说⼀个接⼝启动快,还是10个快,或是更多,答案很明显。很多项⽬做到了⼤⽽全,所谓⼤⽽全就是功能很多,配置很齐全,各种可以扩展配置等,全⾯的不⾏不⾏的,但这意味着什么,你的配置多,有⽤没⽤先不管,⾄少需要编
译和加载的类⽂件都会多出很多来,你说要这样的项⽬能启动快,怎么能启动快呢?
解决⽅法
1. 检查maven中是否⽆⽤的依赖太多
2. ⽐较复杂,使⽤spring-boot-maven插件debug启动,查看该项⽬中,使⽤了哪些配置,哪些配置没⽤,然后在启动类中直接注明只启动使
⽤了的类,并且删掉@SpringBootApplication注解,⼿动填上@Configuration和@Import注解,并在@Import注解中加上那些配置的类。
3. 更换⼀些配置更快的依赖。例如,你使⽤A数据库连接池,功能全,配置多,但速度较慢,但是其实B连接池也能满⾜项⽬需求,但是功能相对
较少,所以配置也少,启动更快,你是不是需要考A和B应该选⼀个。
4. 拆分出更精简的项⽬来独⾃运⾏,⼤⽽全意味着多⽽不精,精⽽简意味着少但是精通,它们速度,不⾔⽽喻。
此次分享就到这⾥,欢迎⼤家的讨论。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论