是否可以配置Spring @Cacheable
,以便如果缓存未命中,对可缓存方法的调用会被阻塞,直到可缓存方法执行一次并填充缓存?
就我而言,我正在处理数据库中不经常更改的数据,实际上如果这些数据发生更改,则需要重新启动应用程序。我可以@PostConstruct
在每个服务启动时创建方法并初始化数据,但这似乎不像@Cacheable
注释那样“优雅”。
我打算将 EhCache 与 Spring@Cacheable
注释一起使用。
更新:
以下是我在尝试使用@PostConstruct 时遇到的一些问题,以防其他人遇到这些问题。@PostConstruct
方法不能是@Transactional
因为它们在对象的属性设置之后而不是在整个弹簧上下文配置之后运行。因此,您不能假设 TX 管理器已全部通过@PostConstruct
调用 time 方法进行设置和配置。解决方法是手动实现一个ApplicationListener
并注入一个 TransactionTemplate ......等等许多额外的工作,这些工作通过使用@Cacheable
.