回答
所谓缓存预热,是指在应用程序启动时提前加载和缓存一些常见的数据,以提高应用启动后的性能,避免在用户首次请求时再进行昂贵的计算或数据库查询。
在 Spring 应用程序中,我们可以使用如下四种手段来做缓存预热:
- 使用
@PostConstruct
注解 - 使用
CommandLineRunner
或ApplicationRunner
- 使用启动监听事件
这里,大明哥推荐第三种方案,因为它解耦了缓存预热逻辑和应用启动流程,当然第二种方案也不错,但是不推荐第一种方案,将 Bean 的初始化进程与缓存预热耦合在一起,实在是不够优雅。
详解
使用 @PostConstruct 注解
@PostConstruct
是 Spring Bean 生命周期注解,当我们使用该注解标注在某个 Bean 的方法上面时,Spring 会确保在该 Bean 初始化完成之后执行该方法。
那么,在这个方法中我们就可以调用服务层或者数据访问层的方法,将数据加载到缓存中。如下: