Spring Data Spanner 模块可帮助您在通过 Spring 框架构建的任何 Java 应用中使用 Spanner。
与所有 Spring Data 模块一样,Spring Data Spanner 提供了一个基于 Spring 的编程模型,该模型保留了 Spanner 的一致性保证和可伸缩性。其功能类似于 Spring Data JPA 和 Hibernate ORM,并具有专为 Spanner 设计的注释。如需详细了解如何将 Spring Data JPA 与 Spanner 搭配使用,请参阅将 Spanner 与 Spring Data JPA 集成(GoogleSQL 方言)。
如果您已熟悉 Spring,Spring Data Spanner 可让您更轻松地在应用中使用 Spanner,并减少需要编写的代码量。
本页面介绍了如何将 Spring Data Spanner 添加到 Java 应用。如需详细了解该模块,请参阅 Spring Data Spanner 参考文档。
安装模块
如果您使用 Maven,请将 Spring Cloud GCP 物料清单 (BOM) 和 Spring Data Spanner 添加到您的 pom.xml
文件中。这些依赖项为 Spring ApplicationContext
提供 Spring Data Spanner 组件:
您还必须创建服务账号并使用服务账号密钥向 Google Cloud 进行身份验证。
如需了解详情,请参阅有关设置 Java 开发环境的说明。您无需安装适用于 Java 的 Google Cloud 客户端库;Spring Boot 入门版会自动安装该客户端库。
配置模块
本部分介绍了 Spring Data Spanner 的一些最常用的配置设置。如需查看设置的完整列表,请参阅参考文档。
指定实例和数据库
如需指定默认实例和数据库,请为您的应用设置以下配置属性:
属性 | 说明 |
---|---|
spring.cloud.gcp.spanner.project-id |
可选。Google Cloud 项目 ID。替换 spring.cloud.gcp.config.project-id 的值。 |
spring.cloud.gcp.spanner.instance-id |
Spanner 实例 ID。 |
spring.cloud.gcp.spanner.database |
要连接的数据库。 |
为 Spanner 数据建模
借助 Spring Data Spanner,您可以使用普通的旧 Java 对象 (POJO) 为存储在 Spanner 表中的数据建模。
对于数据库中的每个表,请声明表示该表中记录的实体。请使用注释将实体及其属性映射到表及其列。
您可以使用以下注释为实体与表之间的简单关系建模:
实体注释 | |
---|---|
@Column(name = "columnName")
|
可选。将属性映射到 Spanner 表中的特定列,并替换自动映射名称的命名策略。
如果省略此属性,Spring Data Spanner 的默认命名策略会将 Java |
@Embedded |
表示属性是可以容纳主键组成部分的嵌入式对象。如果属性实际会用在主键中,您还必须添加 |
|
表示属性包含与当前行交错的行的列表。
默认情况下,Spring Data Spanner 会在创建实例时提取交错行。如需延迟提取行,请在访问属性时使用
示例:如果 |
@NotMapped |
表示属性未存储在数据库中,应忽略。 |
|
表示属性是主键的组成部分,并且标识属性在主键中的位置(从 1 开始)。
示例: |
@Table(name = "TABLE_NAME") |
实体为其建模的表。该实体的每个实例都代表该表中的一条记录。请将
示例: |
如果您需要为更复杂的关系建模,请参阅 Spring Data Spanner 参考文档,详细了解该模块支持的其他注释。
以下示例展示了为 Spring Data Spanner 的 Singers
和 Albums
表建模的一种方法:
- 对于
Singer
实体,该示例包含albums
属性和@Interleaved
注解。此属性包含与Singer
实体交错的相册列表。Spring Data Spanner 会自动填充此属性。 - 对于
Album
实体,该示例包含未存储在 Spanner 中的relatedAlbums
属性。
查询和修改数据
如需使用 Spring Data Spanner 查询和修改数据,您可以获取实现 SpannerOperations
的 SpannerTemplate
Bean。SpannerTemplate
提供了一些使用数据操纵语言 (DML) 语句执行 SQL 查询和修改数据的方法。您还可以使用此 Bean 访问 Spanner 的读取 API 和变更 API。
此外,您还可以扩展 SpannerRepository
接口,以封装在 Spanner 中查询和修改数据的所有应用逻辑。
以下几个部分介绍了如何使用 SpannerTemplate
和 SpannerRepository
。
获取模板 Bean
使用 @Autowired
注解可以自动获取 SpannerTemplate
Bean。然后,您可以在自己的类中使用 SpannerTemplate
。
以下示例演示了获取和使用该 Bean 的类:
您可以使用 SpannerTemplate
Bean 执行只读事务和读写事务。此外,您还可以使用 @Transactional
注解创建声明式事务。
获取代码库 Bean
如果您使用 SpannerRepository
,则可以使用 @Autowired
注解获取实现代码库接口的 Bean。代码库包含一些方法,用于将 Java 函数作为只读事务和读写事务来运行。对于较低级别的操作,您可以获取代码库使用的模板 Bean。
以下几个示例演示了代码库的接口以及获取和使用该 Bean 的类:
管理 Spanner
如需获取 Spanner 数据库的相关信息、使用数据定义语言 (DDL) 语句更新架构,或完成其他管理任务,您可以获取 SpannerDatabaseAdminTemplate
Bean。
使用 @Autowired
注解可以自动获取该 Bean。然后,您可以在自己的类中使用 SpannerDatabaseAdminTemplate
。
以下示例演示了获取和使用该 Bean 的类:
后续步骤
- 开始使用 Spring Cloud GCP。
- 详细了解如何在应用中使用 Spring Data Spanner。
- 提交 GitHub 问题以报告 bug 或提出有关该模块的问题。
- 详细了解 Google Cloud 上的 Spring Framework 支持。
- 试用 Codelab 来部署和运行使用 Spring Cloud GCP 的应用。