关于@SpringBootApplication的扫包优化的文章,然后做了一个测试。
项目用的是spring boot 2.1.4,参考优化:https://www.cnblogs.com/cmfwm/p/7943756.html
网上大多数的文章都说默认注解带来方便的同时也带来了一些问题,如:
1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
2、会加载一些不需要的多余的实例(beans)。
3、会增加 CPU 消耗。
然后优化的过程是利用@Configuration,@Import注解进行指定自动装配,下面是两种不同的注解方式的监视图:
1.@SpringBootApplication扫包方式
在项目启动完之后的堆监视图:
可以看出图中的类加载数是10313,已使用堆内存的大小是241M,然后这个堆内存的使用情况会慢慢的随着时间不断的增大,当达到大概300M的时候就会进行一次gc,这个时候堆内存会降到70M左右。
项目启动时间:
时间大概在10秒左右
2.@Configuration,@Import装配
配置代码如下:
@Configuration
@Import({
DispatcherServletAutoConfiguration.class,
EmbeddedWebServerFactoryCustomizerAutoConfiguration.class,
ErrorMvcAutoConfiguration.class,
HttpEncodingAutoConfiguration.class,
//HttpMessageConvertersAutoConfiguration.class,
MultipartAutoConfiguration.class,
ServletWebServerFactoryAutoConfiguration.class,
RedisAutoConfiguration.class,
AopAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class,
WebMvcAutoConfiguration.class,
WebSocketServletAutoConfiguration.class
})
@ComponentScan(basePackages = {"com.cntaiping"})
public class EditorServeApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(EditorServeApplication.class);
}
public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(EditorServeApplication.class, args);
}
}
性能监视图如下:
可以看出图中的类加载数是9537,已使用堆内存的大小是231M,然后这个堆内存的使用情况也是和上面的情况一样,会慢慢变大。
项目启动时间:
启动时间在9秒左右。
所以综上的结果,第二种方式会比第一种方式的类加载数要少大概7~8百个,然后堆内存要少10M左右,启动时间要少大概1到两秒,个人是觉得没什么好优化的,直接用默认注解比较方便省事