¿Cómo configurar TTL para un documento específico de Couchbase usando spring-data-couchbase?

¿Cómo configurar TTL (Time to Live) para un documento de base de datos específico utilizando spring-data-couchbase? Sé que hay una manera de establecer el tiempo de caducidad usando la notación de documento de la siguiente manera @Document (expiry = 10)

http://docs.spring.io/spring-data/couchbase/docs/1.1.1.RELEASE/reference/html/couchbase.entity.html

Establecerá TTL para todos los documentos guardados a través de la clase Entidad.

Pero parece que hay una manera de establecer el tiempo de caducidad (TTL) para un documento específico “Obtener y tocar: obtener un documento específico y actualizar la caducidad del documento”. mencionado en http://docs.couchbase.com/developer/dev-guide-3.0/read-write.html

¿Cómo puedo lograr la funcionalidad anterior a través de spring-data-couchbase? Incluso si puedo lograr la funcionalidad utilizando Java SDK, estaría bien.

Alguna ayuda…..

Al utilizar Spring-Data-Couchbase, no puede establecer un TTL en una instancia en particular. Insertar (mutar) y configurar el TTL de una sola vez sería bastante complicado dado los pasos de transencoding que están ocultos en el método de save la CouchbaseTemplate .

Sin embargo, si lo que quiere hacer es simplemente actualizar el TTL de un documento ya persistente (que es lo que hace getAndTouch ), hay una manera que no implica ninguna transencoding y por lo tanto se puede aplicar fácilmente:

  • Desde CouchbaseTemplate , obtenga acceso al cliente de SDK subyacente a través de getCouchbaseClient() ( nota por ahora sdc está construido sobre la generación anterior de SDK, 1.4.x , pero pronto habrá una vista previa de sdc-2.0;))
  • Usando el SDK, realice una operación touch en la ID del documento, dele el nuevo TTL
  • El método touch() devuelve un OperationFuture (es asíncrono), así que asegúrate de bloquearlo o considerar el toque solo si se notifica en la callback.

Usando la base de datos de Spring, esta es una forma sencilla de configurar ttl por documento.

 public class CouchbaseConfig extends AbstractCouchbaseConfiguration { @Override protected List bootstrapHosts() { return Arrays.asList("localhost"); } @Override protected String getBucketName() { return "default"; } @Override protected String getBucketPassword() { return "password1"; } @Bean public MappingCouchbaseConverter mappingCouchbaseConverter() throws Exception { MappingCouchbaseConverter converter = new ExpiringDocumentCouchbaseConverter(couchbaseMappingContext()); converter.setCustomConversions(customConversions()); return converter; } class ExpiringDocumentCouchbaseConverter extends MappingCouchbaseConverter { /** * Create a new {@link MappingCouchbaseConverter}. * * @param mappingContext the mapping context to use. */ public ExpiringDocumentCouchbaseConverter(MappingContext, CouchbasePersistentProperty> mappingContext) { super(mappingContext); } // Setting custom TTL on documents. @Override public void write(final Object source, final CouchbaseDocument target) { super.write(source, target); if (source instanceof ClassContainingTTL) { target.setExpiration(((ClassContainingTTL) source).getTimeToLive()); } } } } 
    Intereting Posts