Cosmos DB SQL API - 乐观并发控制 - etag的用法
Cosmos DB SQL API - Optimistic concurrency control - usage of etag
我正在使用 CosmosRepository(不是 ReactiveCosmosRepository)并且我想使用“_etag”处理并发 属性。
我将“_etag”属性 添加到我的文档中:-
class User {
@Id
private String id;
@JsonProperty("_etag")
private string tag;
}
当我执行以下操作时:
document.setTag("ABCD");
repository.save(document)
cosmos db 中的文档如下所示:-
{
"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")
当我使用数据库生成的 _etag 并将其添加到我的 PUT 方法中(显然是为了更新记录)时,即使标签不匹配,保存(更新)也是成功的。
我需要额外的配置吗?带有文档中定义的 etag 字段的简单 repository.save() 是否足够?
您无法在 Cosmos DB 中主动设置 etag 的值。这是自动为您处理的。您只需插入、替换或更新插入项目即可设置。
Jcoder,您使用上述示例作为解决方案的基础是正确的。
Spring 数据 Azure Cosmos DB 建立在 Azure Cosmos DB Java SDK 之上,这是 CosmosClient 的来源。我了解,您正在尝试在不直接使用 Java SDK 和 CosmosClient 的情况下完成上述操作。但实际上这就是我们建议您做的。在 pom.xml 中确保同时引入 Spring Data Azure Cosmos DB 和 Azure Cosmos DB Java SDK。
有关同时使用 Spring 数据连接器和底层 Java SDK 的另一个示例,请参阅此 link
中的“自定义查询执行”
我正在使用 CosmosRepository(不是 ReactiveCosmosRepository)并且我想使用“_etag”处理并发 属性。 我将“_etag”属性 添加到我的文档中:-
class User {
@Id
private String id;
@JsonProperty("_etag")
private string tag;
}
当我执行以下操作时:
document.setTag("ABCD");
repository.save(document)
cosmos db 中的文档如下所示:-
{
"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")
当我使用数据库生成的 _etag 并将其添加到我的 PUT 方法中(显然是为了更新记录)时,即使标签不匹配,保存(更新)也是成功的。
我需要额外的配置吗?带有文档中定义的 etag 字段的简单 repository.save() 是否足够?
您无法在 Cosmos DB 中主动设置 etag 的值。这是自动为您处理的。您只需插入、替换或更新插入项目即可设置。
Jcoder,您使用上述示例作为解决方案的基础是正确的。
Spring 数据 Azure Cosmos DB 建立在 Azure Cosmos DB Java SDK 之上,这是 CosmosClient 的来源。我了解,您正在尝试在不直接使用 Java SDK 和 CosmosClient 的情况下完成上述操作。但实际上这就是我们建议您做的。在 pom.xml 中确保同时引入 Spring Data Azure Cosmos DB 和 Azure Cosmos DB Java SDK。
有关同时使用 Spring 数据连接器和底层 Java SDK 的另一个示例,请参阅此 link
中的“自定义查询执行”