gpt4 book ai didi

java - 通过接口(interface)上的注释使@Cachable 条目无效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:22 27 4
gpt4 key购买 nike

我正在使用 spring@Cacheable 注释来缓存一些数据库条目。我想定期使完整缓存失效。

因此:将这些注解放在接口(interface)方法上是否有效?或者这些注释是否必须放在类方法上(即使它们有一个空方法体)?

public interface MyRepository extends CrudRepository<MyEntity, Long> {
@Override
@Cacheable("cache")
Airline findOne(long id);

@CacheEvict(value = "cache", allEntries = true)
@Scheduled(cron = "0 0 1 * * *")
void removeAll();
}

如果我在接口(interface)方法上有 @Cacheable 并且在服务中有 @CacheEvict,应用程序将成功启动。如果我使用上面的代码,它不起作用。但也许我也做错了?

最佳答案

它可能会起作用,但我建议将这些注释放在实现上。

这更像是一个理论问题,但可以这样想:接口(interface)是一个通用契约,但缓存是一个实现细节

您的接口(interface)可以通过多种方式实现,例如,有一天您可以拥有一个 HsqlDBRepository,对此缓 stub 本没有意义,因为它已经在内存中。

在旁注中,我会仔细考虑为什么你需要“逐出所有”......取决于它发生的频率,它可能会使你的缓存变得无用 - 而且它通常是更深层次问题的迹象该设计。如果您想在一段时间后驱逐实体,请考虑配置 timeToLive/timeToIdle - 大多数缓存后端都很好地支持这一点。

关于java - 通过接口(interface)上的注释使@Cachable 条目无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28193561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com