Integrare Spanner con Spring Data JPA (dialetto PostgreSQL)

Spring Data JPA, che fa parte della più ampia famiglia Spring Data, semplifica implementare repository basati su JPA. Spring Data JPA supporta PostgreSQL e una vasta gamma di altri sistemi di database. Aggiunge un livello di astrazione tra la tua applicazione e il tuo database che semplifica 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 con il dialetto PostgreSQL di Spanner con Spring Data JPA utilizzando il dialetto PostgreSQL Hibernate standard e PGAdapter.

Per un esempio, consulta la completa applicazione di esempio funzionante su GitHub.

Dipendenze

Nel tuo 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-process

Aggiungi il seguente metodo all'applicazione per avviare PGAdapter direttamente dall'applicazione Java. PGAdapter viene eseguito nella stessa JVM della tua applicazione, che 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 Dialetto e driver JDBC PostgreSQL. Configura il driver JDBC PostgreSQL per connetterti a un database in 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