可春@Cacheable
进行配置,以便如果缓存未命中,对可缓存方法的调用会被阻塞,直到可缓存方法执行一次并填充缓存?
就我而言,我正在处理数据库中不经常更改的数据,实际上如果这些数据发生更改,则需要重新启动应用程序。我可以创建 @PostConstruct
方法并在每个服务启动时初始化数据,但这似乎不像 @Cacheable
那样“优雅”注解。
我计划将 EhCache 与 Spring @Cacheable
一起使用注解。
更新:
以下是我在尝试使用@PostConstruct 时遇到的一些问题,以防其他人遇到这些问题。 @PostConstruct
方法不能是 @Transactional
因为它们在设置对象的属性之后运行,而不是在配置整个 spring 上下文之后运行。因此,您不能假设 TX 管理器在 @PostConstruct
时已全部设置和配置。方法被调用。解决方法是实现 ApplicationListener
并手动注入(inject)一个 TransactionTemplate ...等等,通过使用 @Cacheable
简化了许多额外的工作。 .
最佳答案
Spring 4.3 中添加了对同步缓存的支持:
@Service
public class FooService {
@Cacheable(cacheNames = "foos", sync = true)
public Foo getFoo(String id) { ... }
}
见:https://spring.io/blog/2016/03/04/core-container-refinements-in-spring-framework-4-3
关于spring - 可以将 Spring @Cacheable 配置为阻止缓存未命中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11262470/