Spanner in Spring Data JDBC (PostgreSQL) einbinden

Spring Data JDBC, Teil der größeren Spring Data-Familie, erleichtert die Implementierung JDBC-basierter Repositories in Ihrer Anwendung. Spring Data JDBC unterstützt PostgreSQL und andere Datenbanksysteme. Es fügt eine Abstraktionsschicht zwischen Ihrer Anwendung und Ihrer Datenbank hinzu, die das Portieren Ihrer Anwendung von einem Datenbanksystem in ein anderes erleichtert.

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

Sie können Spanner-Datenbanken mit PostgreSQL-Dialekt in Spring Data JDBC einbinden PostgreSQL-Standarddialekt verwendet, der in Spring Data-JDBC und den Spanner-JDBC-Treiber

Für diese Integration ist PGAdapter nicht erforderlich.

Dialektkonfiguration

Spring Data JDBC wählt den verwendeten Datenbankdialekt basierend auf dem JDBC-Treiber aus, der in Spring Data als Datenquelle konfiguriert wurde. Sie müssen Ihrer Anwendung eine zusätzliche Spring-Konfigurationsklasse hinzufügen. Spring Data JDBC anweisen, den PostgreSQL-Dialekt zu verwenden wenn der Spanner-JDBC-Treiber verwendet wird:

@Configuration
public class JdbcConfiguration extends AbstractJdbcConfiguration {

  /** Override the dialect auto-detection, so it also returns PostgreSQL for Spanner. */
  @Override
  public Dialect jdbcDialect(@Nonnull NamedParameterJdbcOperations operations) {
    if (isCloudSpannerPG(operations.getJdbcOperations())) {
      return PostgresDialect.INSTANCE;
    }
    return super.jdbcDialect(operations);
  }

  /** Returns true if the current database is a Spanner PostgreSQL-dialect database. */
  public static boolean isCloudSpannerPG(JdbcOperations operations) {
    return Boolean.TRUE.equals(
        operations.execute(
            (ConnectionCallback<Boolean>)
                connection ->
                    connection.isWrapperFor(CloudSpannerJdbcConnection.class)
                        && com.google.cloud.spanner.Dialect.POSTGRESQL.equals(
                            connection.unwrap(CloudSpannerJdbcConnection.class).getDialect())));
  }
}

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

Abhängigkeiten

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

<dependencies>
  <!-- Spring Data JDBC -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
  </dependency>

  <!-- Spanner JDBC driver -->
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-spanner-jdbc</artifactId>
  </dependency>
<dependencies>

Konfiguration der Datenquelle

Konfigurieren Sie application.properties für die Verwendung des Spanner JDBC-Treibers und stellen Sie eine Verbindung zu einer Spanner-Datenbank mit PostgreSQL-Dialekt her.

# This profile uses a Spanner PostgreSQL database.

spanner.project=my-project
spanner.instance=my-instance
spanner.database=spring-data-jdbc

spring.datasource.driver-class-name=com.google.cloud.spanner.jdbc.JdbcDriver
spring.datasource.url=jdbc:cloudspanner:/projects/${spanner.project}/instances/${spanner.instance}/databases/${spanner.database}

Vollständige Beispielanwendung

Informationen zum Testen dieser Integration mit einer Beispielanwendung finden Sie unter Spring Data-JDBC-Beispielanwendung mit Spanner PostgreSQL

Nächste Schritte