领先一步
VMware 提供培训和认证,助您快速提升技能。
了解更多Spring on Azure 团队与 Azure Cosmos DB 团队携手合作,欣然宣布 Spring Data Azure Cosmos DB v3 正式发布。这是 Azure Cosmos DB 的 SQL API Spring Data 连接器的最新版本。
Azure Cosmos 是一个高可用、全球分布式、多模型数据库,具有极具竞争力的性能 SLA。借助 Spring Data Azure Cosmos DB,开发人员可以在 Azure Cosmos DB SQL API 之上原生使用 Spring Data 来操作文档并发出自定义或派生查询。
随着 v3 连接器的推出及其与 Spring on Azure 的深度集成,新一轮的创新浪潮涌现,帮助 Spring 开发人员提高效率,并在 Azure Cosmos DB 之上利用更多 Spring 抽象。Spring Data Azure Cosmos DB v3 现已支持 Java 11。此外,Spring Data Azure Cosmos DB v3 还增加了对新注解(@Query、@Version 和 @GeneratedValue)的支持、多数据库应用程序,并同时带来了性能改进。
通常,Spring Data 通过派生查询方法简化了点读、点写和基本查询的查询结构。为了灵活编写复杂查询,Spring Data Azure Cosmos DB v3 中的 @Query 注解通过在实现 Spring 数据存储库时提供完全的自定义和灵活性来补充派生查询方法。
public interface AnnotatedQueriesUserRepositoryCodeSnippet extends CosmosRepository<User, String> {
@Query(value = "select * from c where c.firstName = @firstName and c.lastName = @lastName")
List<User> getUsersByTitleAndValue(@Param("firstName") int firstName, @Param("lastName") String lastName);
@Query(value = "select * from c offset @offset limit @limit")
List<User> getUsersWithOffsetLimit(@Param("offset") int offset, @Param("limit") int limit);
}
使用 Spring Data Azure Cosmos DB v3,您可以使用多个数据库和/或多个唯一的 Azure Cosmos DB 帐户。您的 Spring Data 应用程序可能具有类似于此处所示的架构
通过在 application.properties
文件中添加其他凭据,可以引入第二个 Azure Cosmos DB 帐户终结点
# primary account cosmos config
azure.cosmos.primary.uri=your-primary-cosmosDb-uri
azure.cosmos.primary.key=your-primary-cosmosDb-key
...
# secondary account cosmos config
...
您的应用程序代码可以指定一个或多个 Azure Cosmos DB 数据库,以连接到每个帐户终结点。
Spring Data Azure Cosmos DB v3 通过公开 Azure Cosmos DB Java SDK v4 CosmosClientBuilder 类,实现了每个终结点客户端的完全可配置性
@Bean
public CosmosClientBuilder appCosmosClientBuilder() {
return new CosmosClientBuilder()
.key(secondaryProperties.getKey())
.endpoint(secondaryProperties.getUri());
}
这提供了 Azure Cosmos DB 客户端的完全可配置性,包括限制重试策略和其他功能。
通过添加 @Version 注解,用户现在可以将任何字段映射到 _etag,从而方便地使用乐观并发控制。
乐观并发控制允许您防止丢失更新和删除。并发冲突操作会受到常规悲观锁的约束 - 当两个并发操作尝试更新项目的最新版本时,其中一个操作将成功,另一个操作将失败。但是,如果一个或两个操作尝试并发更新同一项目并且正在执行读-修改-写操作,则数据库不知道任一或两个冲突操作先前读取的值是否确实是项目的最新值。幸运的是,乐观并发控制 (OCC) 在任一操作进入数据库引擎内的事务边界之前检测到这种情况。在幕后,Azure Cosmos DB 通过使用 HTTP ETag 字段(JSON 文档中的 _etag)标记每个文档来促进访问条件,该字段在每次修改时都会更改。借助新的 @Version 注解,Spring Data Azure Cosmos DB v3 连接器将乐观锁更进一步 - 现在,Spring 应用程序中的任何对象字段都可以映射到 _etag,从而允许进行更强大的并发控制并提高代码的可读性。使用 OCC,您可以保护您的更新免受意外覆盖他人更改的影响,并防止他人意外覆盖您自己的更改。
通过 Spring Boot Actuator 终结点监控每个 Azure Cosmos DB 实时存储库对象的运行状况。这将在 10 月中旬作为每月 Azure Spring Boot 启动器发布节奏的一部分在 azure-cosmosdb-spring-boot-starter
中启用。
Spring Data Azure Cosmos DB v3 以 Azure Cosmos DB Java SDK v4 为基础,而 Azure Cosmos DB Java SDK v4 本身也根据 Java 用户的大量用户反馈得到了改进。因此,Java SDK v4 优化了负载下的请求吞吐量和稳定性。目前,Java SDK v4 比旧版 Java SDK(v3 和 v2)的性能提升了 20%,并且预计未来将有更多改进。
请遵循这些 性能提示 和 故障排除文档,以确保您的应用程序已完全优化。查看 Azure Cosmos DB 的最佳实践,了解 数据建模 和 分区。从长远来看,这些因素在性能方面的影响力可能与客户端设置一样大!
@GeneratedValue 注解用于自动 ID 生成。
审计框架支持自动填充 createdBy、createdDate、lastModifiedBy 和 lastModifiedDate 字段
支持嵌套字段作为分区键
能够获取每个 Azure Cosmos DB 请求消耗的 请求单元
请参阅我们的 发行说明 和 更改日志,以获取完整的功能变更列表。
在您的项目中使用 Spring Data Azure Cosmos DB
如果您已设置 Azure Cosmos DB 和 Spring 项目,只需在现有的 POM 文件中包含以下依赖项,或尝试我们的 入门示例。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-spring-data-cosmos</artifactId>
<version>3.0.0</version>
</dependency>
如果您不熟悉 Azure Cosmos DB 和 Azure Spring Starters,您可以了解有关 Azure Cosmos DB 的更多信息,并按照我们的 分步指南 开始使用。