Saltar al contenido

Spring Boot: ¿cómo deshabilitar @Cacheable durante el desarrollo?

Hacemos una verificación profunda cada reseñas de nuestra página web con el objetivo de enseñarte en todo momento información con la mayor veracidad y actualizada.

Solución:

El tipo de caché se detecta y configura automáticamente de forma predeterminada. Sin embargo, puede especificar qué tipo de caché usar agregando spring.cache.type a su configuración. Para deshabilitarlo, establezca el valor en NONE.

Como quieras hacerlo para un perfil específico, agrégalo a esos perfiles. application.properties en este caso modificar el application-dev.properties y añadir

spring.cache.type=NONE

Esto deshabilitará el almacenamiento en caché.

El comentario de David Newcomb dice la verdad:

spring.cache.type=NONE no desactiva el almacenamiento en caché, evita que las cosas se almacenen en caché. es decir, todavía agrega 27 capas de AOP/pila de interceptor a su programa, es solo que no realiza el almacenamiento en caché. Depende de lo que quiera decir con “apagarlo todo”.

El uso de esta opción puede acelerar el inicio de la aplicación, pero también podría tener algunos gastos generales.

1) Para deshabilitar completamente la función Spring Cache

Mueve el @EnableCaching class en una clase de configuración dedicada que envolveremos con un @Profile para habilitarlo:

@Profile("!dev")
@EnableCaching
@Configuration
public class CachingConfiguration 

Por supuesto, si ya tienes un Configuration clase que está habilitada para todos menos el dev entorno, solo reutilízalo:

@Profile("!dev")
//... any other annotation 
@EnableCaching
@Configuration
public class NoDevConfiguration 

2) Use un administrador de caché falso (noop)

En algunos casos, activar @EnableCaching por perfil no es suficiente porque algunas de sus clases o algunas dependencias de Spring de su aplicación esperan recuperar del contenedor de Spring un bean que implementa el org.springframework.cache.CacheManager interfaz.
En este caso, la forma correcta es usar una implementación falsa que permitirá que Spring resuelva todas las dependencias mientras la implementación del CacheManager está libre de gastos generales.

Podríamos lograrlo jugando con @Bean y @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();
    

O si es más adecuado, puede agregar el spring.cache.type=NONE propiedad que produce el mismo resultado que el escrito en la respuesta de M. Deinum.

Para su segunda pregunta, haga algo como esto:

Escriba un método que determine si un perfil en particular está activo o no (el entorno es su entorno inyectado)

boolean isProfileActive(String profile)  
   return Arrays.asList(environment.getActiveProfiles()).contains(profile);

luego utilícelo para su condición de hechizo en la anotación almacenable en caché

Eres capaz de añadir valor a nuestro contenido informacional aportando tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *