🏷️个人主页:牵着猫散步的鼠鼠
🏷️系列专栏:Java全栈-专栏
🏷️个人学习笔记,若有缺误,欢迎评论区指正
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。
目录
前言
实现方案概述
具体实现方案
① 启动监听事件
② @PostConstruct 注解
③ CommandLineRunner或ApplicationRunner
④ 实现InitializingBean接口
小结
编辑
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。
那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系统呢?
在 Spring Boot 启动之后,可以通过以下手段实现缓存预热:
可以使用 ApplicationListener 监听 ContextRefreshedEvent 或 ApplicationReadyEvent 等应用上下文初始化完成事件,在这些事件触发后执行数据加载到缓存的操作,具体实现如下:
@Component public class CacheWarmer implements ApplicationListener{ @Override public void onApplicationEvent(ContextRefreshedEvent event) { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
或监听 ApplicationReadyEvent 事件,如下代码所示:
@Component public class CacheWarmer implements ApplicationListener { @Override public void onApplicationEvent(ApplicationReadyEvent event) { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
在需要进行缓存预热的类上添加 @Component 注解,并在其方法中添加 @PostConstruct 注解和缓存预热的业务逻辑,具体实现代码如下:
@Component public class CachePreloader { @Autowired private YourCacheManager cacheManager; @PostConstruct public void preloadCache() { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
CommandLineRunner 和 ApplicationRunner 都是 Spring Boot 应用程序启动后要执行的接口,它们都允许我们在应用启动后执行一些自定义的初始化逻辑,例如缓存预热。 CommandLineRunner 实现示例如下:
@Component public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
ApplicationRunner 实现示例如下:
@Component public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
CommandLineRunner 和 ApplicationRunner 区别如下:
实现 InitializingBean 接口并重写 afterPropertiesSet 方法,可以在 Spring Bean 初始化完成后执行缓存预热,具体实现代码如下:
@Component public class CachePreloader implements InitializingBean { @Autowired private YourCacheManager cacheManager; @Override public void afterPropertiesSet() throws Exception { // 执行缓存预热业务... cacheManager.put("key", dataList); } }
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。它可以通过监听 ContextRefreshedEvent 或 ApplicationReadyEvent 启动事件,或使用 @PostConstruct 注解,或实现 CommandLineRunner 接口、ApplicationRunner 接口,和 InitializingBean 接口的方式来完成。