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

Spring Data JDBC はより大きな Spring Data ファミリーの一部であり、これを利用することで、アプリケーションで JDBC ベースのリポジトリを実装しやすくなります。Spring Data JDBC は、PostgreSQL やその他のデータベース システムをサポートしています。アプリケーションとデータベースの間に抽象化レイヤが追加され、アプリケーションがデータベース間で簡単に移行できるようになります。

Spanner の PostgreSQL 言語データベースに Spring Data JDBC を設定する

Spring Data JDBC に含まれている標準の PostgreSQL 言語と Spanner JDBC ドライバを使用して、Spanner PostgreSQL 言語データベースを Spring Data JDBC と統合できます。

この統合に PGAdapter を使用する必要はありません。

言語の構成

Spring Data JDBC は使用するデータベースの言語を、Spring Data に構成されたデータソースの JDBC ドライバに基づいて選択します。Spanner JDBC ドライバを使用する場合、Spring Data JDBC に PostgreSQL 言語を使用するように指示するには、アプリケーションに追加の 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}

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

サンプル アプリケーションでこの統合を試すには、Spring Data JDBC Sample Application with Spanner PostgreSQL を参照してください。

次のステップ