Integrare Spanner con Spring Data JPA (dialetto PostgreSQL)

Spring Data JPA, parte della famiglia più ampia di Spring Data, semplifica l'implementazione di 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, semplificando il porting da un sistema di database a un 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 Hibernate PostgreSQL standard e PGAdapter.

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

Dipendenze

Nel tuo progetto, aggiungi le dipendenze di 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-process

Aggiungi il seguente metodo all'applicazione per avviare PGAdapter direttamente dall'applicazione Java. PGAdapter viene eseguito nella stessa JVM dell'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 il dialetto Hibernate di PostgreSQL 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

Applicazione di esempio completa

Un'applicazione di esempio funzionante è disponibile su GitHub.

Passaggi successivi