前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【八股文Java】: 在Spring生态下,实现预热功能(比如提前加载本地缓存),需要使用哪些扩展点​。为什么?

【八股文Java】: 在Spring生态下,实现预热功能(比如提前加载本地缓存),需要使用哪些扩展点​。为什么?

作者头像
崔认知
发布2023-10-20 15:37:28
3840
发布2023-10-20 15:37:28
举报
文章被收录于专栏:nobodynobody

问:在Spring生态下,实现预热功能(比如提前加载本地缓存),需要使用哪些扩展点?为什么?

答:

1、实现SmartLifecycle接口。

注意:排序在WebServerStartStopLifecycle之前运行(默认不用管)。

2、实现接口org.springframework.context.ApplicationListener<ContextRefreshedEvent>,监听ContextRefreshedEvent事件。

注意:监听事件执行的线程池配置,不能异步线程池执行哦😑。

3、实现接口org.springframework.boot.ApplicationRunner(spring boot)。

4、实现接口org.springframework.boot.CommandLineRunner(spring boot)。

5、使用注解@PostConstruct(在当前bean初始化完后就会执行目标方法)。

6、实现接口

org.springframework.beans.factory.InitializingBean(在当前bean初始化完后就会执行目标方法)

注意5、6不要异步执行,可能会碰到死锁现象哦😑。

因为实现预热功能,需要在流量流入系统之前,容器启动准备之后实现业务逻辑。

1、SmartLifecycle的运行时机:在容器启动最后finishRefresh阶段,在web服务真正启动之前(WebServerStartStopLifecycle,自己实现的SmartLifecycle注意与它的执行顺序)。

代码语言:javascript
复制
org.springframework.context.support.AbstractApplicationContext#refresh

排序后执行,注意web服务启动的WebServerStartStopLifecycle需要最后执行。

代码语言:javascript
复制
org.springframework.context.support.DefaultLifecycleProcessor#startBeans

2、监听ContextRefreshedEvent事件的运行时机:在SmartLifecycle的运行完之后,会发布事件ContextRefreshedEvent。

3、ApplicationRunner、CommandLineRunner的运行时机:是spring boot启动最后阶段,健康状态设置为健康之前。

代码语言:javascript
复制
org.springframework.boot.SpringApplication#run(java.lang.String...)

ApplicationRunner、CommandLineRunner运行:

代码语言:javascript
复制
org.springframework.boot.SpringApplication#callRunners

健康状态相关事件发布:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档