Cosmos DB SQL API-优化并发控制-使用etag



我使用的是CosmosReserve(而不是ReactiveCosmosRepository(,我想使用_etag";所有物我添加了"_etag";属性为:-

class User {
@Id
private String id;
@JsonProperty("_etag")
private string tag;
}

当我做以下操作时:

document.setTag("ABCD");
repository.save(document)

宇宙数据库中的文档看起来像:-

{
"id" : " some random uuid ",
"_etag" : " again some random uuid",
"_ts" : "123123123"
"_rid": "random string"
"_self": "again random strings"
"_attachments" : "attachments/"
}

但是我本以为_etag看起来像:

{
...
"_etag" : "ABCD" 
...
}

因为我做了document.setTag("ABCD")

当我获取db生成的_etag并将其添加到我的PUT方法中时(显然是为了更新记录(,即使标记不匹配,保存(更新(也是成功的。

我需要额外的配置吗?在文档中定义etag字段的简单repository.save((就不够了吗?

https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples/blob/master/src/main/java/com/azure/cosmos/examples/documentcrud/sync/DocumentCRUDQuickstart.java#L210

Jcoder您使用上面的示例作为解决方案的基础是正确的。

Spring Data Azure Cosmos DB是在Azure Cosmos DBJava SDK之上构建的,这也是CosmosClient的来源。我知道,您正试图在不直接使用Java SDK和CosmosClient的情况下完成上述操作。但实际上这就是我们建议你做的。在pom.xml中,确保同时引入Spring Data Azure Cosmos DB和Azure Cosmos DBJava SDK。

关于同时使用Spring Data连接器和底层Java SDK的另一个例子;自定义查询执行";在这个环节

https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/how-to-guides-spring-data-cosmosdb

您不能在Cosmos DB中主动设置etag的值。这是自动为您处理的。您只需要插入、替换或追加商品即可对其进行设置。

最新更新