我正在寻找两件事:
如何在使用 Spring 引导“dev”配置文件的开发过程中禁用所有缓存。在 application.properties 中没有一个通用设置可以将其全部关闭。最简单的方法是什么?
如何禁用特定方法的缓存?我试图像这样使用 SpEl:
@Cacheable(value = "complex-calc", condition="#${spring.profiles.active} != 'dev'}")
public String someBigCalculation(String input){
...
}
但我可以让它工作。 SO 上有几个与此相关的问题,但它们指的是 XML 配置或其他内容,但我使用的是 Spring Boot 1.3.3,它使用自动配置。
我不想让事情过于复杂。
原文由 Wouter 发布,翻译遵循 CC BY-SA 4.0 许可协议
David Newcomb 的评论 道出了真相:
使用此选项可能会加快应用程序的启动速度,但也会产生一些开销。
1)完全禁用Spring Cache特性
将
@EnableCaching
类移动到我们将用@Profile
包装的专用配置类中以启用它:当然,如果您已经拥有一个
Configuration
类,除了dev
环境之外的所有环境,只需重用它:2) 使用假的 (noop) 缓存管理器
在某些情况下,通过配置文件激活
@EnableCaching
是不够的,因为您的某些类或应用程序的某些 Spring 依赖项希望从 Spring 容器中检索实现org.springframework.cache.CacheManager
接口的 bean。在这种情况下,正确的方法是使用一个伪造的实现,它允许 Spring 解决所有依赖关系,而
CacheManager
的实现是免费的。我们可以通过玩
@Bean
和@Profile
来实现它:或者,如果它更合适,您可以添加
spring.cache.type=NONE
产生与 M. Deinum 答案中所写相同结果的属性。