相信很多大的企业对于使用spring cloud微服务模式的时候,都会有很多个springboot的service,但是由于部分企业的业务非常大,某个即使很小的springboot的jar包在启动的时候也非常的慢,目前我们的springboot项目启动要在1分钟左右,但是我也见过需要启动5、6分钟的,所以一般对于这种情况出现的时候领导是非常不满意的,所以对于我们来说,我们来介绍下对于springboot项目的jar包优化启动速度相关的策略。
本文我们主要介绍优化Bean扫描模块的优化。
大部分公司的SpringBoot应用的启动类几乎都是这么写的:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
这么写,SpringBoot会扫描Application类所在的包路径,假如包路径为com.aaa,那么SpringBoot启动时就会扫描com.aaa这个包下的所有类,因为Spring需要去判断每个类是不是Bean,比如一个类加了@Component注解就是Bean,没加就不是Bean,但是不管怎样都需要去解析类,因此,如果com.aaa包下的类特别特别多,就会很影响扫描的速度,从而影响应用的启动速度,解决办法就是:
@SpringBootApplication(scanBasePackages = {"com.aaa.controller", "com.aaa.service",...}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
通过@SpringBootApplication注解的「scanBasePackages」属性明确指定那些「真正定义了Bean的包路径」,这样SpringBoot启动时就只会扫描指定的包路径,这样Bean扫描的效率就会高很多,从而提高应用的启动速度。经过我的测试,我们的微服务中总共有2000多个bean,300多个@Service,200多个@RestController。警告上面的改造之后,springboot项目的jar包启动缩短了50秒左右。
还没有评论,来说两句吧...