使 Spring 引导应用程序启动更快

Make Spring boot application Startup Faster

spring-boot 中有两个 IOC 容器:BeanFactoryApplicationContext

根据我的理解,ApplicationContext 支持 bean 的急切初始化,而 BeanFactory 则懒惰地进行初始化。

问题陈述: 在我的 Spring 引导应用程序中,我想使用 bean 的惰性初始化来使应用程序启动更快。任何人都可以提出实现相同目标的解决方案吗?

使用惰性初始化属性:

spring.main.lazy-initialization=true

此 属性 仅在 spring boot 2.2 及更高版本中受支持。如果版本低于 2.2,则需要写一个 BeanFactoryPostProcessor。这 属性 将确保在需要之前不会注入依赖项,执行热重启时可以看到时间上的主要差异。

仅供参考 ApplicationContext 是一个 BeanFactory,两者都支持惰性初始化。这实际上取决于调用 BeanFactory#getBeanProvider 的时间。

关于 Aniket Sahrawat 答案的解释:spring.main.lazy-initialization=true

惰性初始化的影响

在整个应用程序中启用延迟初始化可能会产生积极和消极的影响。

让我们来谈谈其中的一些,正如新功能的官方公告中所描述的那样:

  1. 延迟初始化可能会减少创建的 beans 数量 应用程序正在启动——因此,我们可以缩短启动时间 应用程序
  2. 随着 none 个 bean 的创建,直到需要它们时,我们可以 屏蔽问题,让它们在 运行 时间内而不是启动时间
  3. 问题可能包括内存不足错误、配置错误或 class-定义发现错误
  4. 此外,当我们处于网络上下文中时,触发 bean 创建 需求会增加 HTTP 请求的延迟——bean 创建只会影响第一个请求,但这可能有一个 对负载平衡和自动缩放的负面影响。

参考:https://www.baeldung.com/spring-boot-lazy-initialization#effects