将 Spanner 与 Spring Data JPA(GoogleSQL 方言)集成

Spring Data JPA 是更大的 Spring Data 系列的一部分,它可让您更轻松地实现基于 JPA 的代码库。Spring Data JPA 支持 Spanner 和各种其他数据库系统。它会在应用与数据库之间添加一个抽象层,使应用能够更轻松地从一个数据库系统移植到另一个数据库系统。

为 Spanner 中的 GoogleSQL 方言数据库设置 Spring Data JPA

您可以使用开源 Spanner Hibernate Dialect (SpannerDialect) 将 Spanner GoogleSQL 方言数据库与 Spring Data JPA 集成。

如需查看示例,请参阅 GitHub 上的完整有效的示例应用

依赖项

在您的项目中,为 Spring Data JPASpanner Hibernate Dialect 以及 Spanner 官方支持的开源 JDBC 驱动程序添加 Apache Maven 依赖项。

  <dependencies>
    <!-- Spring Data JPA -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- Hibernate Dialect and JDBC Driver dependencies-->
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-hibernate-dialect</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-jdbc</artifactId>
    </dependency>
  </dependencies>

配置

配置 application.properties 以使用 Spanner Hibernate Dialect 和 Spanner JDBC 驱动程序。

# Spanner connection URL.
# - ${PROJECT_ID} Replace with your GCP project ID
# - ${INSTANCE_ID} Replace with your Spanner instance ID
# - ${DATABASE_NAME} Replace with the name of your Spanner database that you created inside your Spanner instance

spring.datasource.url=jdbc:cloudspanner:/projects/${PROJECT_ID}/instances/${INSTANCE_ID}/databases/${DATABASE_NAME}

# Specify the Spanner JDBC driver.
spring.datasource.driver-class-name=com.google.cloud.spanner.jdbc.JdbcDriver

# Specify the Spanner Hibernate dialect.
spring.jpa.properties.hibernate.dialect=com.google.cloud.spanner.hibernate.SpannerDialect

spring.jpa.hibernate.ddl-auto=update

# Settings to enable batching statements for efficiency
spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true

# You can display SQL statements and stats for debugging if needed.
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

完整示例应用

GitHub 提供了一个有效的示例应用

后续步骤