Actualización de caché asíncrona con abstracción de caché de primavera

Usando la abstracción de almacenamiento en caché de Spring, ¿cómo puedo hacer que un caché actualice una entrada de forma asincrónica sin dejar de devolver la entrada anterior?

Estoy tratando de usar la abstracción de almacenamiento en caché de Spring para crear un sistema de almacenamiento en caché donde, después de un tiempo de espera "suave" relativamente corto, las entradas de caché se vuelven elegibles para la actualización. Luego, cuando se consultan, se devuelve el valor almacenado en caché y se inicia una operación de actualización asincrónica para actualizar la entrada. Quisiera también

El generador de caché de Guava me permite especificar que las entradas en el caché se actualicen después de un cierto período de tiempo. El método reload () del cargador de caché se puede anular con una implementación asincrónica, lo que permite que se devuelva el valor en caché obsoleto hasta que se recupere el nuevo. Sin embargo, el almacenamiento en caché de primavera parece no usar el CacheLoader de un caché de guayaba subyacente

¿Es posible hacer este tipo de actualización asíncrona de caché usando la abstracción de almacenamiento en caché de Spring?

Editar para aclarar: con CacheBuilder de Guava puedo usar refreshAfterWrite () para obtener el comportamiento que quiero. p.ej. deCaches de guayaba explicados:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .refreshAfterWrite(1, TimeUnit.MINUTES)
   .build(
       new CacheLoader<Key, Graph>() {
         public Graph load(Key key) { // no checked exception
           return getGraphFromDatabase(key);
         }

         public ListenableFuture<Graph> reload(final Key key, Graph prevGraph) {
           if (neverNeedsRefresh(key)) {
             return Futures.immediateFuture(prevGraph);
           } else {
             // asynchronous!
             ListenableFutureTask<Graph> task = ListenableFutureTask.create(new Callable<Graph>() {
               public Graph call() {
                 return getGraphFromDatabase(key);
               }
             });
             executor.execute(task);
             return task;
           }
         }
       });

Sin embargo, no puedo ver una manera de obtener el comportamiento de refreshAfterWrite () usando la abstracción @Cacheable de Spring.

Respuestas a la pregunta(2)

Su respuesta a la pregunta