【发布时间】:2018-08-21 04:32:40
【问题描述】:
鉴于我有一些可缓存的方法,是否可以通过更改 application.properties 文件中的属性来实时启用/禁用其使用,或者是一个好主意? 例如:
我的 application.properties 文件有:UseBookCache=true
@Cacheable(cacheNames="books", condition = "${UseBookCache}")
public Book getByIsbn(String isbn){
//Return book
}
我想通过设置UseBookCache=false在运行时禁用缓存
我不想禁用所有缓存,只禁用这个特定实例。这是满足我需要的最佳方式吗?
【问题讨论】:
-
您能解释一下为什么需要禁用缓存吗?也许你的问题可以用更好的方式解决。
-
我有多个缓存,但如果我想将内存用于其他用途,我可能需要在运行时禁用一个。我想通过 AWS S3 中的一些设置来切换它。
-
我明白,这是一个有趣的用例。我认为@will 答案应该可以工作,但它会禁用缓存以获取新结果,它不会驱逐以前的值,因此缓存内容可能仍在使用内存,直到值被驱逐或过期。跨度>
-
如果你在上下文中注册了一个bean解析器,你可以通过
environmentbean解析属性:@Cacheable(cacheNames="books", condition = "@environment.getProperty('UseBookCache')")