springboot项目突然启动缓慢
springboot项目在debug模式下本来运行的挺快,后来某一天突然启动一半就卡在那一点一点龟速前进,还以为是我电脑问题,或者我写的代码问题,后来在网上搜了一下,结合自身项目情况,原来是断点问题,
有个断点无论如何都去不掉。可能是之前遗留的,后代码删除了,
也可能是因为这个地方的代码属于加载运行的什么节点,总之去不掉
后来根据网上的方法,在debug模式窗口下,选择Run菜单,点击Remove All Breakpoints的选项(好像也可以选择Skip All Breakpoing。)
然后所有断点都去掉了,重新启动,流畅!!!
springboot启动太慢优化
接下来我们一起探讨下每个问题。
1.组件自动扫描带来的问题(@SpringBootApplication)
我们在第一篇博客就介绍了,我们默认情况下,我们会使用@SpringBootApplication注解来自动获取应用的配置信息,但这样也会带来一些副作用。使用这个注解后,会触发自动配置(auto-configuration)和组件扫描(component scanning),这跟使用@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解的作用是一样的。这样做给开发带来方便的同时,会有以下的一些影响:
(a)会导致项目启动时间变长(原因:加载了我们不需要使用的组件,浪费了cpu资源和内存资源)。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
(b)会加载一些不需要的多余的实例(beans)。
(c)会增加CPU消耗和内存的占用。
2.如何避免组件自动扫描带来的问题(不使用@ SpringBootApplication)
本着有问题就要解决的心态,针对以上的问题,我们要怎么解决呢?很明显,既然@SpringBootApplication加载了一些不必要的配置,那么我们想是否可以就加载我们自己指定的配置呢?我们的思路不使用@SpringBootApplication,并且不使用@ComponentScan注解(此注解会自动扫描我们注解了@Controller,@Service的注解的类,加载到Spring IOC容器中),然后我们使用@Configuration和@EnableAutoConfiguration进行配置启动类,代码如下:
package com.kfit.spring_boot_performance; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.kfit.spring_boot_performance.controller.HelloController; /** * @author Angel --守护天使 * @version v.0.1 * @date 2017年3月11日 */ //移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 来替代 @Configuration @EnableAutoConfiguration<strong>本文来源gao@daima#com搞(%代@#码@网2</strong> public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }