β

使用lazyInit缩短Spring Boot启动时间

Harries Blog™ 32 阅读

虽然 Spring Boot DevTools提供的快速重启有助于库类加载,但并不能解决Spring Boot应用启动 时间 长的问题。在本文中,我们将看看如何使用SpringBoot的懒加载属性提升我们应用程序的启动时间。

起初,无论你选择哪种嵌入式 服务器 Tom cat 或Jetty,全新轻装上阵的Spring Boot Web应用都会快速启动。随着新功能和依赖项不断加入,应用程变得越来越重,启动时间也越来越长。从建立与 数据库 的连接,通过网络从集成端点获取 数据 ,或从本地资源加载以及 解析 50兆字节的 XML 文件,你的应用在启动后就非常繁忙,有时超过十几分钟或更长时间。

所有繁重工作在都放在启动时完成,这样应用在运行时能有很好的性能,用户操作我们的应用时就无需停顿等待或遇到糟糕的性能,所有资源都已准备好并进行 缓存 ,因此在真正请求时可立即使用。

另一方面,作为 开发 人员,我们也不喜欢等待并浪费时间对启动日志进行非生产性检查。这里有一个简单的解决方案可以应用于任何项目,以减轻一些等待启动的痛苦并改善你的开发体验。

想象一下,如果你有一个Spring bean 来加载和缓存某些资源的值,资源可能是远程Web服务或需要映射到 模型 对象的本地CSV文件的数组,在生产环境中,在启动时需要做这样事情。

但是,如果你在本地运行应用程序,则很可能并不总是需要此资源,而只是在使用依赖于它的功能时才需要此资源。在下面的示例中,我们使用sleep()方法人为代表应用的缓慢启动。


@Component
class ResourceLoader {
 
    private List<Term> resources;
 
    @PostConstruct
    void initHeavyLoading() throws InterruptedException {
        log.info("Loading start");
        // time-consuming execution
        Thread.sleep(10_000);
        resources = loadResources();
        log.info("Loading end");
    }
     
    // …
 
}
作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:使用lazyInit缩短Spring Boot启动时间, 感谢原作者分享。

发表评论