Unable to set document expiry inside Couchbase transactions with Spring Data 3.x using upsert/withExpiry

Context
I’m migrating to Spring 3.x and using Couchbase transactions for atomic updates. I need to set a TTL/expiry on documents as part of the transactional upsert, but it appears that setting expiry within a transaction is either disallowed in Spring Data 3.x.

Environment

  • Couchbase Server: Enterprise Edition 7.2.5

  • Java: 21

  • Spring Boot: 3.5.9

  • Couchbase Client: 3.5.3

What I’m trying to do
Within a transaction, upsert a document and set its expiry based on a calculated duration:

Java

return repository.getOperations()

.upsertById(MyDomainClass.class)

.withExpiry(calculateDurationFromNow(getDateTime(domainObjectExpiryTime)))

.one(myDomainObject);

Questions

  1. Is setting document expiry inside transactions supported by Couchbase when using Spring Data Couchbase 3.x?

  2. If not supported, is there a recommended pattern to apply TTL atomically with transactional writes (e.g., post-commit mutation, separate non-transactional write, or using a different operation)?

  3. Are there configuration flags or SDK-level calls that enable expiry within transactions?

Thanks!

Hi @kuber thanks for letting us know this would be useful functionality for you. It is indeed not currently supported, but it’s a feature that makes sense now that we’re in the process of supporting TTL with KV operations in the underlying SDK, so I’ve escalated this internally to see what’s possible. No promises for now, but watch this space :slight_smile: