mem*_*und 8 java spring caching
我正在使用spring和@Cacheable注释来缓存一些数据库条目.我想定期使完整缓存无效.
因此:将这些注释放在接口方法上是否有效?或者这些注释必须放在类方法上(即使它们有一个空的方法体)?
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();
}
Run Code Online (Sandbox Code Playgroud)
如果我有@Cacheable接口方法和@CacheEvict服务,应用程序将成功启动.如果我使用上面的代码,它不起作用.但也许我也做错了?
小智 13
它可能会起作用,但我建议将这些注释放在实现上.
这更像是一个理论问题,但可以这样思考:接口是一种常见的契约,但缓存是一个实现细节.
您的界面可以通过多种方式实现,例如,有一天您可以拥有一个HsqlDBRepository,缓存完全没有意义,因为它已经存在于内存中.
在旁注中,我会仔细考虑为什么你需要"驱逐所有"...取决于它发生的频率,它可能会使你的缓存无用 - 而且它通常是设计更深层次问题的标志.如果您想在一段时间之后逐出实体,请考虑配置timeToLive/timeToIdle - 大多数缓存后端都能很好地支持这一点.
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |