Integra Spanner con Spring Data JPA (dialetto PostgreSQL)

Spring Data JPA, che fa parte della più ampia famiglia Spring Data, semplifica l'implementazione dei repository basati su JPA. Spring Data JPA supporta PostgreSQL e un'ampia gamma di altri sistemi di database. Aggiunge un livello di astrazione tra l'applicazione e il database che semplifica la porta dell'applicazione da un sistema di database all'altro.

Configura Spring Data JPA per i database di dialetti PostgreSQL di Spanner

Puoi integrare i database di dialetti PostgreSQL di Spanner con Spring Data JPA utilizzando il dialetto standard PostgreSQL Hibernate e PGAdapter.

Per un esempio, consulta l'applicazione di esempio funzionante su GitHub.

Dipendenze

Nel progetto, aggiungi le dipendenze Apache Maven per Spring Data JPA, il driver JDBC PostgreSQL e 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>

Avvia PGAdapter in elaborazione

Aggiungi il seguente metodo all'applicazione per avviare PGAdapter direttamente dall'applicazione Java. PGAdapter viene eseguito nella stessa JVM della tua applicazione e l'applicazione si connette a PGAdapter su 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;
  }

Configurazione

Configura application.properties per utilizzare PostgreSQL Hibernate Dialect e il driver JDBC PostgreSQL. Configura il driver JDBC PostgreSQL per connetterti a un database di dialetti PostgreSQL tramite 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

Esempio di applicazione completo

Su GitHub è disponibile un'applicazione di esempio funzionante.

Passaggi successivi