【问题标题】:How to set TTL for Couchbase document dynamically for every save operation using springframework CrudRepository?如何使用springframework CrudRepository为每个保存操作动态设置Couchbase文档的TTL?
【发布时间】:2018-07-19 12:00:33
【问题描述】:

我想在特定文档的每个保存操作上设置不同的 TTL 值。就像我有一份包含员工和指定字段的文档。

对于每个新员工,应根据指定值相应地设置 TTL。就像员工是解决方案架构师一样,文档有效期应设置为 30 天。如果指定为“高级建筑师”,则应将有效期设置为 20 天。

我知道如何通过spring框架设置过期,但是如何动态设置呢? PFB:

@Document(expiry = Constants.COUCHBASE_RESOURCE_TTL)
public class EmployeeResource { 
}

【问题讨论】:

    标签: spring couchbase


    【解决方案1】:

    你可以touch保存后的文档并设置一个变量定义的TTL。

    假设您有一个名为 getTTLByEmployee 的方法,它将按 Employee 类型返回 TTL (int)。您可以执行以下操作:

    Employee savedEmployee = yourRepository.save(employee);
    yourRepository.getCouchbaseOperations().getCouchbaseBucket()
              .touch(savedEmployee.getId(), getTTLByEmployee(employee.getEmployeeType()));
    

    【讨论】:

    • 这是正确答案。从 spring-data-couchbase:4.3.0 开始,代码应该看起来像 yourRepository.getOperations().getCouchbaseClientFactory().getCollection(null).touch(id, ttl); 或者这可以作为 couchbaseTemplate.getCollection(null).touch(id, ttl)
    【解决方案2】:

    除了默认设置外,您还可以使用http://docs.couchbase.com/sdk-api/couchbase-java-client-2.2.4/com/couchbase/client/java/Bucket.html#touch-java.lang.String-int- 方法在运行时扩展/更新文档的 TTL。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多