【问题标题】:Minimise Spring Boot Startup Time [duplicate]最小化 Spring Boot 启动时间
【发布时间】:2016-06-13 01:31:41
【问题描述】:

在我看来,SpringBoot 项目需要很长时间才能加载。这可能是因为 SpringBoot 正在为您配置组件,其中一些您甚至可能不需要。 最明显的做法是从类路径中删除不必要的依赖项。然而,这还不够。

有没有什么办法可以找出 SpringBoot 为你配置了哪些模块来挑选你不需要的并禁用它们?

还有什么其他方法可以加快 SpringBoot 应用程序的启动时间吗?

【问题讨论】:

标签: java spring spring-boot optimization startup


【解决方案1】:

我可以告诉你,我通过 Spring MVC、JMS、Atomikos 事务、Hibernate、JMX 支持和嵌入式 Tomcat 使用 restful web 服务运行了一个大型(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 {
}

【讨论】:

    【解决方案2】:

    一些可能有用的额外提示。

    另外:

    由于this article 建议将@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 {
        }
    
    }
    

    【讨论】:

    • -noverify 在 JDK 13 中已弃用,可能会在未来的版本中删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多