es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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);
}
Tags:  ,

Answer

  1. Avatar for 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 clase Customer y utilizar una cadena única como clave, así:

    @Cacheable(value = "customer", key = "T(Customer).class.name.concat(':all')")
    public List<customer> allCustomer(){
        return db.values().stream().collect(Collectors.toList());
    }
    

    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é.

Comments are closed.