大卫·纽科姆的评论说的是实话:
spring.cache.type=NONE
不会关闭缓存,它会阻止缓存内容。也就是说,它仍然向你的程序添加了27层AOP /拦截器堆栈,只是它不做缓存。这取决于他所说的“全部关闭”是什么意思。
使用此选项可能会加快应用程序的启动速度,但也可能会产生一些开销。
1)完全禁用弹簧缓存功能
将类移动到专用的配置类中,我们将用 包装以启用它:@EnableCaching
@Profile
@Profile("!dev")
@EnableCaching
@Configuration
public class CachingConfiguration {}
当然,如果您已经有一个为除环境之外的所有应用程序启用的类,只需重用它:Configuration
dev
@Profile("!dev")
//... any other annotation
@EnableCaching
@Configuration
public class NoDevConfiguration {}
2)使用假(noop)缓存管理器
在某些情况下,仅按配置文件激活是不够的,因为某些类或应用的某些 Spring 依赖项希望从 Spring 容器中检索实现接口的 Bean。
在这种情况下,正确的方法是使用一个假的实现,它将允许Spring解析所有依赖关系,而实现是无开销的。@EnableCaching
org.springframework.cache.CacheManager
CacheManager
我们可以通过玩 和 来实现它:@Bean
@Profile
import org.springframework.cache.support.NoOpCacheManager;
@Configuration
public class CacheManagerConfiguration {
@Bean
@Profile("!dev")
public CacheManager getRealCacheManager() {
return new CaffeineCacheManager();
// or any other implementation
// return new EhCacheCacheManager();
}
@Bean
@Profile("dev")
public CacheManager getNoOpCacheManager() {
return new NoOpCacheManager();
}
}
或者,如果它更合适,则可以添加生成与 M. Deinum 答案中写入的相同结果的属性。spring.cache.type=NONE