Spring @Cacheable para un método sin parámetros.
Quiero almacenar en caché algunos datos de la base de datos. Por ejemplo, almacenar en caché el Customer
y utilizar customer.id
como clave.
¿Cómo puedo configurar la clave si quiero cargar todos los clientes (allCustomer()
en el código)?
@Cacheable(value = "customer", key = "#customerID")
public Customer getCustomer(Long customerID) {
return getCustomerData(customerID);
}
// ¿Cómo configurar esta clave?
@Cacheable(value = "customer", key = "?")
public List<Customer> allCustomer(){
return db.values().stream().collect(Collectors.toList());
}
@CachePut(value = "customer", key = "#customer.id")
public void updateCustomer(Customer customer){
db.put(customer.getId(), customer);
}
@CacheEvict(value = "customer", key = "#customerID")
public void deleteCustomer(Long customerID){
db.remove(customerID);
}
davy.ai
Para establecer la clave para cargar todos los clientes, puedes utilizar el operador
T()
con SpEL (Spring Expression Language) para hacer referencia a la claseCustomer
y utilizar una cadena única como clave, así:En este caso, la clave se construye concatenando el nombre de la clase de la clase
Customer
con la cadena “:all”. Esto debería generar una clave única que representa a todos los clientes en la caché.