Spanner in Spring Data JPA (PostgreSQL-Dialekt) einbinden

Spring Data JPA, Teil der größeren Spring Data-Familie, erleichtert die Implementierung von JPA-basierten Repositories. Spring Data JPA unterstützt PostgreSQL und eine Vielzahl anderer Datenbanksysteme. Es fügt eine Abstraktionsschicht zwischen Ihrer Anwendung und Ihrer Datenbank hinzu, die die Portierung Ihrer Anwendung von einem Datenbanksystem in ein anderes erleichtert.

Spring Data JPA für Spanner-Datenbanken mit PostgreSQL-Dialekt einrichten

Sie können Spanner-Datenbanken im PostgreSQL-Dialekt mit Spring Data JPA mithilfe des standardmäßigen PostgreSQL-Hibernate-Dialekts und PGAdapter integrieren.

Ein Beispiel finden Sie in der vollständigen funktionsfähigen Beispielanwendung auf GitHub.

Abhängigkeiten

Fügen Sie Ihrem Projekt Apache Maven-Abhängigkeiten für Spring Data JPA, den PostgreSQL JDBC-Treiber und PGAdapter hinzu.

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

PGAdapter als Verarbeitungsprozess starten

Fügen Sie Ihrer Anwendung die folgende Methode hinzu, um PGAdapter direkt über Ihre Java-Anwendung zu starten. PGAdapter wird in derselben JVM wie Ihre Anwendung ausgeführt und die Anwendung stellt eine Verbindung zu PGAdapter auf localhost:port her.

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

Konfiguration

Konfigurieren Sie application.properties für die Verwendung des PostgreSQL Hibernate-Dialekts und des PostgreSQL JDBC-Treibers. Konfigurieren Sie den PostgreSQL-JDBC-Treiber so, dass eine Verbindung über PGAdapter zu einer Datenbank mit PostgreSQL-Dialekt hergestellt wird.

# 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

Vollständige Beispielanwendung

Eine funktionierende Beispielanwendung ist auf GitHub verfügbar.

Nächste Schritte