最小化弹簧启动启动时间
在我看来,SpringBoot项目需要很长时间才能加载。发生这种情况可能是因为SpringBoot正在为您配置组件,其中一些您甚至可能不需要。最明显的做法是从类路径中删除不必要的依赖项。然而,这还不够。
有没有办法找出SpringBoot正在配置哪些模块,以便您挑选出不需要的内容并禁用它们?
还有什么可以做的来加快SpringBoot应用程序的启动时间吗?
在我看来,SpringBoot项目需要很长时间才能加载。发生这种情况可能是因为SpringBoot正在为您配置组件,其中一些您甚至可能不需要。最明显的做法是从类路径中删除不必要的依赖项。然而,这还不够。
有没有办法找出SpringBoot正在配置哪些模块,以便您挑选出不需要的内容并禁用它们?
还有什么可以做的来加快SpringBoot应用程序的启动时间吗?
我可以告诉你,我运行一个大型(800,000多行代码)应用程序,通过Spring MVC,JMS,Atomikos事务,Hibernate,JMX支持和嵌入式Tomcat使用宁静的Web服务。完成所有这些,应用程序将在大约19秒内在我的本地桌面上启动。
Spring Boot 尽量不配置您未使用的模块。但是,很容易引入您不希望的其他依赖项和配置。
请记住,Spring Boot 遵循配置范例的约定,并且只需在类路径中放置一个库,就可能导致 Spring Boot 尝试将模块配置为使用该库。此外,通过执行一些简单的事情,例如使用@RestController注释您的类将触发Spring Boot以自动配置整个Spring MVC堆栈。
您可以查看幕后发生的事情,并启用调试日志记录,就像从命令行启动应用程序时指定一样简单。还可以在 application.properties 中指定 debug=true。--debug
此外,您可以简单设置日志记录级别,如下所示:application.properties
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
如果检测到不需要的自动配置模块,可以将其禁用。可以在此处找到有关此内容的文档:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-disabling-specific-auto-configuration
示例如下所示:
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
一些可能有帮助的其他提示。
hibernate.ddl-auto=none
update
-Xquickstart
-XX:TieredStopAtLevel=1 -noverify
另外:
正如本文所建议的那样,建议用于本地开发环境。@ComponentScan(lazyInit = true)
TL;DR
我们想要实现的是仅在本地开发环境中启用 Bean 延迟加载,并将急切的初始化留给生产环境。他们说你不能吃你的蛋糕,也吃它,但有了春天,你实际上可以。这一切都要归功于个人资料。
@SpringBootApplication public class LazyApplication { public static void main(String[] args) { SpringApplication.run(LazyApplication.class, args); } @Configuration @Profile("local") @ComponentScan(lazyInit = true) static class LocalConfig { } }