Spanner を Spring Data JDBC(PostgreSQL)と統合する

大規模な Spring Data ファミリーの一部である Spring Data JDBC を使用すると、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 ドライバに基づいて、使用するデータベース言語を選択します。Spanner JDBC ドライバを使用するときに PostgreSQL 言語を使用するように Spring Data JDBC に指示するには、アプリケーションに Spring 構成クラスを追加する必要があります。

@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>

データソースの構成

Spanner JDBC ドライバを使用して Spanner PostgreSQL 言語データベースに接続するように application.properties を構成します。

# 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}

完全なサンプル アプリケーション

サンプル アプリケーションでこの統合を試すには、Spanner PostgreSQL を使用した Spring Data JDBC サンプル アプリケーションをご覧ください。

次のステップ