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

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

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

Spanner GoogleSQL 言語のデータベースを Spring Data JDBC と統合するには、アプリケーションに Spanner GoogleSQL 用の言語を追加します。

言語の構成

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>

データソースの設定

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

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 GoogleSQL を参照してください。

次のステップ