Integrare Spanner con Spring Data JPA (dialetto PostgreSQL)

Spring Data JPA, parte della più ampia famiglia di dati Spring Data, semplifica l'implementazione dei repository basati su JPA. Spring Data JPA supporta PostgreSQL e molti altri sistemi di database. Aggiunge un livello di astrazione tra l'applicazione e il database per semplificare la portabilità dell'applicazione da un sistema di database all'altro.

Configura Spring Data JPA per database Spanner PostgreSQL

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

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

Dipendenze

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

Aggiungi il metodo seguente alla tua applicazione per avviare PGAdapter direttamente dalla tua applicazione Java. PGAdapter viene eseguito nella stessa JVM della tua applicazione e l'applicazione si connette a PGAdapter il giorno 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 di PostgreSQL. Configura il driver JDBC PostgreSQL per la connessione a un database dialetto 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

Applicazione di esempio completa

Su GitHub è disponibile un'applicazione di esempio funzionante.

Passaggi successivi