安排Spring缓存驱逐?

Phi*_*ffi 6 java spring spring-cache

是否有可能在每天午夜安排弹簧缓存驱逐?

我读过Springs Cache Docs,但没有发现计划缓存驱逐.

我需要每天逐出缓存并重新缓存它,以防我的应用程序之外发生一些变化.

Ole*_*huk 13

尝试使用@Scheduled示例:

@Scheduled(fixedRate = ONE_DAY)
@CacheEvict(value = { CACHE_NAME })
public void clearCache() {      
}
Run Code Online (Sandbox Code Playgroud)

你也可以在@Scheduled中使用cron表达式.

  • 不要忘记 Application 类中的“@EnableScheduling”。 (7认同)
  • 这不行。Scheduled 和 CacheEvict 必须位于不同的类/方法中。 (2认同)
  • @Zon 只需添加一条评论,例如。“//没事做” (2认同)
  • @Zon 日志语句? (2认同)

小智 11

如果您在带参数的方法上使用 @Cacheable,则永远不要忘记@CacheEvict 上的 allEntries=true注释属性,否则您的调用只会驱逐您提供给 clearCache() 方法的关键参数,这没什么 =>不要从缓存中驱逐任何东西。


faf*_*afl 5

也许不是最优雅的解决方案,但@CacheEvict不起作用,所以我直接选择了CacheManager.

此代码清除通过调度程序调用的缓存foo

class MyClass {

    @Autowired CacheManager cacheManager;

    @Cacheable(value = "foo")
    public Int expensiveCalculation(String bar) {
        ...
    }

    @Scheduled(fixedRate = 60 * 1000);
    public void clearCache() {
        cacheManager.getCache("foo").clear();
    }
}
Run Code Online (Sandbox Code Playgroud)