将 Spanner 与 Spring Data JDBC (PostgreSQL) 集成

Spring Data JDBC 是较大 Spring Data 家族的一部分,可让您更轻松地在应用中实现基于 JDBC 的仓库。Spring Data JDBC 支持 PostgreSQL 和 其他数据库系统它会在应用和数据库之间添加一个抽象层,以便应用更轻松地从一个数据库系统移植到另一个数据库系统。

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

您可以将 Spanner PostgreSQL 方言数据库与 Spring Data JDBC 集成 使用 Spring Data JDBC 和 Spanner JDBC 驱动程序。

您无需使用 PGAdapter 即可进行此集成。

方言配置

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

@Configuration
public class JdbcConfiguration extends AbstractJdbcConfiguration {

  /** Override the dialect auto-detection, so it also returns PostgreSQL for Spanner. */
  @Override
  public Dialect jdbcDialect(@Nonnull NamedParameterJdbcOperations operations) {
    if (isCloudSpannerPG(operations.getJdbcOperations())) {
      return PostgresDialect.INSTANCE;
    }
    return super.jdbcDialect(operations);
  }

  /** Returns true if the current database is a Spanner PostgreSQL-dialect database. */
  public static boolean isCloudSpannerPG(JdbcOperations operations) {
    return Boolean.TRUE.equals(
        operations.execute(
            (ConnectionCallback<Boolean>)
                connection ->
                    connection.isWrapperFor(CloudSpannerJdbcConnection.class)
                        && com.google.cloud.spanner.Dialect.POSTGRESQL.equals(
                            connection.unwrap(CloudSpannerJdbcConnection.class).getDialect())));
  }
}

如需查看示例,请参阅 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 PostgreSQL 方言数据库。

# This profile uses a Spanner PostgreSQL database.

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}

完整示例应用

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

后续步骤