在我看来,SpringBoot项目需要很长时间才能加载。这可能是因为SpringBoot正在为您配置组件,其中一些甚至可能不需要。 最明显的事情是从类路径中删除不必要的依赖项。但是,这还不够。
有没有办法找出SpringBoot正在配置哪些模块来挑选你不需要的东西并禁用它们?
一般来说,还有什么方法可以加快SpringBoot应用程序的启动时间吗?
答案 0 :(得分:34)
我可以告诉你,我通过Spring MVC,JMS,Atomikos事务,Hibernate,JMX支持和嵌入式Tomcat使用restful webservices运行大型(800,000多行代码)应用程序。有了这些,应用程序将在大约19秒内在我的本地桌面上启动。
Spring Boot努力不配置您不使用的模块。但是,很容易引入您不想要的其他依赖项和配置。
请记住,Spring Boot遵循约定优于配置范例,只需将库放在类路径中就可以使Spring Boot尝试配置模块以使用库。另外,通过使用@RestController注释类的简单操作将触发Spring Boot自动配置整个Spring MVC堆栈。
您可以查看正在进行的操作,并启用调试日志记录,就像从命令行启动应用程序时指定--debug
一样简单。您还可以在application.properties中指定debug = true。
此外,您可以将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 {
}
答案 1 :(得分:4)
一些其他提示可能会有所帮助。
hibernate.ddl-auto=none
而不是update
-Xquickstart
-XX:TieredStopAtLevel=1 -noverify
此外:
this article建议在本地开发环境中使用@ComponentScan(lazyInit = true)
。
TL; DR
我们想要实现的是仅在您的本地开发环境中启用bean延迟加载,而将急切的初始化留给生产。他们说您不能也不能吃蛋糕,但是有了Spring,您实际上可以。多亏了个人资料。
@SpringBootApplication public class LazyApplication { public static void main(String[] args) { SpringApplication.run(LazyApplication.class, args); } @Configuration @Profile("local") @ComponentScan(lazyInit = true) static class LocalConfig { } }