如何使用spring-data-couchbase为特定的Couchbase文档设置TTL?

如何使用spring-data-couchbase为特定的couchbase文档设置TTL(生存时间)? 我知道有办法使用Document notation设置到期时间如下@Document(expiry = 10)

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

它将为通过Entity类保存的所有文档设置TTL。

但似乎有办法为特定文档设置过期(TTL)时间“获取并触摸:获取指定文档并更新文档过期”。 在http://docs.couchbase.com/developer/dev-guide-3.0/read-write.html中提到

如何通过spring-data-couchbase实现上述function即使我可以使用Java SDK实现function,也没关系。

任何帮助…..

使用Spring-Data-Couchbase,您无法在特定实例上设置TTL。 考虑到CouchbaseTemplate save方法中隐藏的转码步骤,插入(变异)和一次设置TTL将非常复杂。

但是,如果你想要做的只是更新已经存在的文档的TTL(这是getAndTouch所做的),有一种方法不涉及任何转码,因此可以轻松应用:

  • CouchbaseTemplate ,通过getCouchbaseClient()访问底层SDK客户端请注意 ,现在sdc是基于上一代SDK 1.4.x构建的,但很快就会有sdc-2.0的预览;))
  • 使用SDK,对文档的ID执行touch操作,为其提供新的TTL
  • touch()方法返回一个OperationFuture (它是异步的),所以一定要阻止它或者只有在回调中通知时才考虑触摸。

使用Spring数据couchbase,这是一种可以为每个文档配置ttl的简单方法。

 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()); } } } } 
Interesting Posts