Spanner in Spring Data JPA einbinden (PostgreSQL-Dialekt)

Spring Data JPA ist Teil der größeren Spring Data-Familie, JPA-basierte Repositories implementieren. Spring Data JPA unterstützt PostgreSQL und einer Vielzahl anderer Datenbanksysteme. Es fügt eine Abstraktionsebene zwischen Ihre Anwendung und Ihre Datenbank, um die Portierung Ihrer Anwendung zu erleichtern. von einem Datenbanksystem in ein anderes zu übertragen.

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

Sie können Spanner-Datenbanken mit PostgreSQL-Dialekt in Spring Data JPA einbinden mit dem Standard-PostgreSQL-Dialekt Hibernate und PGAdapter aus.

Ein Beispiel finden Sie in der vollständigen funktionierende Beispielanwendung auf GitHub

Abhängigkeiten

Fügen Sie in Ihrem Projekt Apache Maven-Abhängigkeiten für Spring Data JPA hinzu. den PostgreSQL-JDBC-Treiber und 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>

PGAdapter während der Verarbeitung starten

Fügen Sie Ihrer Anwendung die folgende Methode hinzu, um PGAdapter zu starten direkt von Ihrer Java-Anwendung aus. PGAdapter wird in derselben JVM ausgeführt wie und die Anwendung stellt eine Verbindung zu PGAdapter her. 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;
  }

Konfiguration

application.properties für die Verwendung von PostgreSQL Hibernate konfigurieren Dialekt und der PostgreSQL-JDBC-Treiber. PostgreSQL konfigurieren JDBC-Treiber zum Herstellen einer Verbindung zu einer PostgreSQL-Dialect-Datenbank über 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

Vollständige Beispielanwendung

Eine funktionierende Beispielanwendung ist die auf GitHub verfügbar sind.

Nächste Schritte