Spring Data Azure Cosmos DB V3 – 全面可用

工程 | Andy Clement | 2020 年 10 月 5 日 | ...

Azure 上的 Spring 团队与 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连接器的发布及其与Azure上的Spring的深度集成,新一波创新浪潮被释放出来,以帮助Spring开发人员提高生产力,并在Azure Cosmos DB之上利用更多的Spring抽象。Spring Data Azure Cosmos DB v3现在支持Java 11。此外,Spring Data Azure Cosmos DB v3增加了对新注解(@Query、@Version和@GeneratedValue)、多数据库应用程序的支持,同时还带来了性能改进。

强大的新功能和Spring抽象支持

@Query注解支持

通常,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应用程序可能具有类似于此处所示的体系结构

multi database setup

通过附加凭据增强您的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注解

通过添加@Version注解,用户现在可以将任何字段映射到_etag,从而方便地使用乐观并发控制。

乐观并发控制允许您防止丢失的更新和删除。并发、冲突的操作受制于常规的悲观锁定——当两个并发操作尝试更新项目的最新版本时,其中一个将成功,另一个将失败。然而,如果一个或两个尝试并发更新同一项目的操作正在执行读-修改-写,数据库不知道冲突操作中的任何一个或两个先前读取的值是否确实是该项目的最新值。幸运的是,乐观并发控制(OCC)在任何一个操作进入数据库引擎内部的事务边界之前检测到这种情况。在底层,Azure Cosmos DB通过使用HTTP ETag字段(JSON文档中的_etag)标记每个文档来方便访问条件,该字段在每次修改时都会更改。通过新的@Version注解,Spring Data Azure Cosmos DB v3连接器将乐观锁定更进一步——您的Spring应用程序中的任何对象字段现在都可以映射到_etag,从而实现更大的并发控制和代码中含义的改进清晰度。通过OCC,您可以保护您的更新不会意外覆盖他人的更改,并防止他人意外覆盖您自己的更改。

Spring Boot actuator

通过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为基础,该SDK本身已根据Java用户的重大反馈进行了改进。因此,Java SDK v4优化了请求吞吐量和负载下的稳定性。目前,Java SDK v4比旧的Java SDK(v3和v2)的性能提高了20%,未来还有望进一步改进。

performance figures

遵循这些性能提示故障排除文档,确保您已充分优化应用程序。审查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的信息,并按照我们的分步指南开始使用。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有