The David Newcomb comment tells the truth :
spring.cache.type=NONE
doesn't switch caching off, it prevents things
from being cached. i.e. it still adds 27 layers of AOP/interceptor
stack to your program, it's just that it doesn't do the caching. It
depends what he means by "turn it all off".
Using this option may fast up the application startup but could also have some overheads.
1)To disable completely the Spring Cache feature
Move the @EnableCaching
class in a dedicated configuration class that we will wrap with a @Profile
to enable it :
@Profile("!dev")
@EnableCaching
@Configuration
public class CachingConfiguration {}
Of course if you already have a Configuration
class that is enabled for all but the dev
environment, just reuse it :
@Profile("!dev")
//... any other annotation
@EnableCaching
@Configuration
public class NoDevConfiguration {}
2) Use a fake (noop) Cache manager
In some cases, activating @EnableCaching
by profile is not enough because some of your classes or some Spring dependencies of your app expect to retrieve from the Spring container a bean implementing the org.springframework.cache.CacheManager
interface.
In this case, the right way is using a fake implementation that will allow Spring to resolve all dependencies while the implementation of the CacheManager
is overhead free.
We could achieve it by playing with @Bean
and @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();
}
}
Or if it is more suitable, you can add the spring.cache.type=NONE
property that produces the same result as written in the M. Deinum answer.