將 Spanner 與 Spring Data JDBC (PostgreSQL) 整合

Spring Data JDBC 是 Spring Data 系列的一部分,可讓您在應用程式中輕鬆實作以 JDBC 為基礎的存放區。Spring Data JDBC 支援 PostgreSQL 和其他資料庫系統。它會在應用程式和資料庫之間新增抽象層,讓應用程式更容易從一個資料庫系統移植到另一個系統。

為 Spanner PostgreSQL 方言資料庫設定 Spring Data JDBC

您可以使用 Spring Data JDBC 和 Spanner JDBC 驅動程式所附帶的標準 PostgreSQL 方言,將 Spanner PostgreSQL 方言資料庫與 Spring Data 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」。

後續步驟