将 Spanner 与 Spring Data JDBC 集成 (GoogleSQL)

Spring Data JDBC 是更大 Spring Data 系列的一部分,可让您更轻松地在应用中实现基于 JDBC 的仓库。它在应用和数据库之间添加了一个抽象层,使应用更容易从一个数据库系统移植到另一个数据库系统。

为 Spanner GoogleSQL 方言数据库设置 Spring Data JDBC

您可以通过向应用添加适用于 Spanner GoogleSQL 的方言,将 Spanner GoogleSQL 方言数据库与 Spring Data JDBC 集成。

方言配置

Spring Data JDBC 会根据在 Spring Data 中配置为数据源的 JDBC 驱动程序选择所使用的数据库方言。您必须向应用添加额外的方言提供程序,以便在使用 Spanner JDBC 驱动程序时指示 Spring Data JDBC 使用 GoogleSQL 方言:

public class SpannerDialectProvider implements DialectResolver.JdbcDialectProvider {
  @Override
  public Optional<Dialect> getDialect(JdbcOperations operations) {
    return Optional.ofNullable(
        operations.execute((ConnectionCallback<Dialect>) SpannerDialectProvider::getDialect));
  }

  @Nullable
  private static Dialect getDialect(Connection connection) throws SQLException {
    DatabaseMetaData metaData = connection.getMetaData();
    String name = metaData.getDatabaseProductName().toLowerCase(Locale.ENGLISH);
    if (name.contains("spanner")) {
      return SpannerDialect.INSTANCE;
    }
    return null;
  }
}

此方言提供程序必须添加到应用中的 spring.factories 文件中:

org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=org.springframework.data.jdbc.repository.config.DialectResolver.DefaultDialectProvider,com.google.cloud.spanner.sample.SpannerDialectProvider

如需查看示例,请参阅 GitHub 上的完整可运行示例应用

依赖项

在项目中,添加 Spring Data JDBCSpanner JDBC 驱动程序的 Apache Maven 依赖项。

<dependencies>
  <!-- Spring Data JDBC -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
  </dependency>

  <!-- Spanner JDBC driver -->
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner-jdbc</artifactId>
  </dependency>
<dependencies>

数据源配置

application.properties 配置为使用 Spanner JDBC 驱动程序,并连接到 Spanner GoogleSQL 方言数据库。

spanner.project=my-project
spanner.instance=my-instance
spanner.database=spring-data-jdbc

spring.datasource.driver-class-name=com.google.cloud.spanner.jdbc.JdbcDriver
spring.datasource.url=jdbc:cloudspanner:/projects/${spanner.project}/instances/${spanner.instance}/databases/${spanner.database}

完整示例应用

如需尝试将此集成与示例应用搭配使用,请参阅使用 Spanner GoogleSQL 的 Spring Data JDBC 示例应用

后续步骤