spring - 可以将 Spring @Cacheable 配置为阻止缓存未命中吗?

标签 spring caching ehcache

可春@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/

相关文章:

java - Spring Security 中的链式身份验证

node.js - yarn 缓存占用大量空间

jsp - Tomcat 7 不同的行为

Spring @Cacheable 正在破坏 @RequestMapping

java - Spring AOP 在 Tomcat 和 tcserver 中不起作用

java - hibernate 、MySql、 Spring

spring - Spring @Async取消并开始吗?

iphone - NSCachesDirectory 不是我的文件系统中的目录

java - 对于 ehcache 存储和对象是否需要实现可序列化?

docker - 对通过 docker 部署的应用程序使用 ehcache 违反无状态规则