Spanner を Spring Data JPA(PostgreSQL 言語)と統合する

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

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

標準の PostgreSQL Hibernate 言語と PGAdapter を使用して、Spanner PostgreSQL 言語データベースを Spring Data JPA と統合できます。

サンプルについては、GitHub の完全な作業用サンプル アプリケーションをご覧ください。

依存関係

プロジェクトで、Spring Data JPAPostgreSQL JDBC ドライバPGAdapter に対する Apache Maven 依存関係を追加します。

  <dependencies>
    <!-- Spring Data JPA -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- Add the PostgreSQL JDBC driver -->
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
    <!-- Add PGAdapter as a dependency, so we can start it in-process -->
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
    </dependency>
  </dependencies>

PGAdapter を処理中に開始する

アプリケーションに次のメソッドを追加して、Java アプリケーションから直接 PGAdapter を起動します。PGAdapter はアプリケーションと同じ JVM で実行され、アプリケーションは localhost:port の PGAdapter に接続します。

  /** Starts PGAdapter in-process and returns a reference to the server. */
  static ProxyServer startPGAdapter() {
    // Start PGAdapter using the default credentials of the runtime environment on port 9432.
    OptionsMetadata options = OptionsMetadata.newBuilder().setPort(9432).build();
    ProxyServer server = new ProxyServer(options);
    server.startServer();
    server.awaitRunning();

    return server;
  }

構成

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

# The example uses the standard PostgreSQL Hibernate dialect.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

# Defining these properties here makes it a bit easier to build the connection string.
# Change these to match your Cloud Spanner PostgreSQL-dialect database.
spanner.project=my-project
spanner.instance=my-instance
spanner.database=my-database
# This setting ensures that PGAdapter automatically commits the current transaction if it encounters
# a DDL statement in a read/write transaction, and then executes the DDL statements as a single DDL
# batch.
spanner.ddl_transaction_mode=options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction

# This is the connection string to PGAdapter running in-process.
spring.datasource.url=jdbc:postgresql://localhost:9432/projects%2F${spanner.project}%2Finstances%2F${spanner.instance}%2Fdatabases%2F${spanner.database}?${spanner.ddl_transaction_mode}

# You can display SQL statements and stats for debugging if needed.
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

# Enable JDBC batching.
spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true

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

作業用サンプル アプリケーションは GitHub で入手できます。

次のステップ