@Cacheable de Spring: necesidad de conocer si el valor se devuelve desde la caché o no.
Nuestras aplicaciones utilizan Spring Cache y necesitan saber si la respuesta fue devuelta desde la caché O si fue calculada realmente. Estamos buscando agregar una bandera en el HashMap de resultado que lo indique. Sin embargo, cualquier cosa devuelta por el método está en caché, así que no estamos seguros si podemos hacerlo en la implementación del método de cálculo.
¿Hay alguna manera de saber si el método de cálculo fue ejecutado O si el valor devuelto proviene de la caché al llamar al método de cálculo?
Código que estamos utilizando para el método de cálculo –
java
</string,></string,></string,>
@Cacheable(
cacheNames = "request",
key = "#cacheMapKey",
unless = "#result['ErrorMessage'] != null")
public Map<string, object=""> calculate(Map<string, object=""> cacheMapKey, Map<string, object=""> message) {
// implementación del método
return result;
}
davy.ai
Sí, hay una forma de saber si se ejecutó el método
calculate
o si el valor de retorno proviene de la memoria caché al llamar al métodocalculate
.Un enfoque consiste en utilizar un Interceptor de Caché y modificar el método
calculate
para devolver un objeto personalizado que incluya el resultado y una bandera booleana que indique si el resultado se obtuvo de la memoria caché o no. El Interceptor de Caché puede establecer esta bandera en función de si la memoria caché fue acertada o no.Aquí hay un ejemplo de cómo se puede implementar:
Con este enfoque, el método
calculate
ahora devuelve un objeto personalizado que incluye el resultado y una bandera que indica si el resultado se obtuvo de la memoria caché o no. El Interceptor de Caché ahora puede interceptar la llamada al método y establecer esta bandera en función de si la memoria caché fue acertada o no.Aquí hay un ejemplo de cómo se puede implementar el Interceptor de Caché:
Con este enfoque, cuando se llama al método
calculate
, el Interceptor de Caché intercepta la llamada al método y comprueba si se acertó la memoria caché. Si se acertó la memoria caché, establece la bandera en el objeto CacheResult devuelto por el métodocalculate
en verdadero, lo que indica que el resultado se obtuvo de la memoria caché. Si no se acertó la memoria caché, se permite que la llamada al método continúe y el objeto CacheResult devuelto por el métodocalculate
incluye el resultado y una bandera false que indica que el resultado se calculó.</string,></string,></string,></string,></string,>