Intégrer Spanner à Spring Data JPA (dialecte PostgreSQL)

Spring Data JPA, qui fait partie de la famille Spring Data, facilite la mise en œuvre des dépôts basés sur JPA. Spring Data JPA est compatible avec PostgreSQL et d'autres systèmes de base de données. Il ajoute une couche d'abstraction entre votre application et votre base de données, ce qui facilite le port de votre application d'un système de base de données à un autre.

Configurer Spring Data JPA pour les bases de données de dialecte PostgreSQL dans Spanner

Vous pouvez intégrer des bases de données de dialecte PostgreSQL Spanner à Spring Data JPA à l'aide du dialecte Hibernate standard de PostgreSQL et de PGAdapter.

Pour voir un exemple, reportez-vous à l'exemple d'application fonctionnel complet sur GitHub.

Dépendances

Dans votre projet, ajoutez des dépendances Apache Maven pour Spring Data JPA, le pilote JDBC PostgreSQL et PGAdapter.

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

Démarrer PGAdapter en cours de traitement

Ajoutez la méthode suivante à votre application pour démarrer PGAdapter directement depuis votre application Java. PGAdapter s'exécute sur la même JVM que votre application et celle-ci se connecte à PGAdapter sur localhost:port.

  /** 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;
  }

Configuration

Configurez application.properties pour utiliser le dialecte Hibernate PostgreSQL et le pilote JDBC PostgreSQL. Configurez le pilote JDBC PostgreSQL pour qu'il se connecte à une base de données de dialecte PostgreSQL via PGAdapter.

# 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

Exemple d'application complète

Un exemple d'application fonctionnelle est disponible sur GitHub.

Étapes suivantes