使 Spring 引导应用程序启动更快
Make Spring boot application Startup Faster
spring-boot 中有两个 IOC 容器:BeanFactory
和 ApplicationContext
。
根据我的理解,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
惰性初始化的影响
在整个应用程序中启用延迟初始化可能会产生积极和消极的影响。
让我们来谈谈其中的一些,正如新功能的官方公告中所描述的那样:
- 延迟初始化可能会减少创建的 beans 数量
应用程序正在启动——因此,我们可以缩短启动时间
应用程序
- 随着 none 个 bean 的创建,直到需要它们时,我们可以
屏蔽问题,让它们在 运行 时间内而不是启动时间
- 问题可能包括内存不足错误、配置错误或
class-定义发现错误
- 此外,当我们处于网络上下文中时,触发 bean 创建
需求会增加 HTTP 请求的延迟——bean
创建只会影响第一个请求,但这可能有一个
对负载平衡和自动缩放的负面影响。
参考:https://www.baeldung.com/spring-boot-lazy-initialization#effects
spring-boot 中有两个 IOC 容器:BeanFactory
和 ApplicationContext
。
根据我的理解,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
惰性初始化的影响
在整个应用程序中启用延迟初始化可能会产生积极和消极的影响。
让我们来谈谈其中的一些,正如新功能的官方公告中所描述的那样:
- 延迟初始化可能会减少创建的 beans 数量 应用程序正在启动——因此,我们可以缩短启动时间 应用程序
- 随着 none 个 bean 的创建,直到需要它们时,我们可以 屏蔽问题,让它们在 运行 时间内而不是启动时间
- 问题可能包括内存不足错误、配置错误或 class-定义发现错误
- 此外,当我们处于网络上下文中时,触发 bean 创建 需求会增加 HTTP 请求的延迟——bean 创建只会影响第一个请求,但这可能有一个 对负载平衡和自动缩放的负面影响。
参考:https://www.baeldung.com/spring-boot-lazy-initialization#effects