Integrare Spanner con Spring Data JDBC (PostgreSQL)

Spring Data JDBC, parte della più ampia Spring La famiglia di dati semplifica l'implementazione di repository basati su JDBC nel tuo un'applicazione. Spring Data JDBC supporta PostgreSQL e altri sistemi di database. Aggiunge un livello di astrazione tra l'applicazione e il database che semplifica il porting dell'applicazione da un sistema di database all'altro.

Configura JDBC di Spring Data per database con dialetti PostgreSQL di Spanner

Puoi integrare i database con dialetto PostgreSQL di Spanner con Spring Data JDBC utilizzando il dialetto PostgreSQL standard incluso con Spring Data JDBC e il driver JDBC Spanner.

Non è necessario utilizzare PGAdapter per questa integrazione.

Configurazione del dialetto

JDBC Spring Data seleziona il dialetto del database che utilizza in base il driver JDBC che è stato configurato come origine dati in Spring Data. Devi aggiungere un'altra classe di configurazione Spring all'applicazione per indicare a Spring Data JDBC di utilizzare il dialetto PostgreSQL quando viene utilizzato il driver JDBC Spanner:

@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())));
  }
}

Per un esempio, consulta la sezione dell'applicazione di esempio in uso su GitHub.

Dipendenze

Nel progetto, aggiungi le dipendenze Apache Maven per Spring Data JDBC e il driver JDBC Spanner.

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

Configurazione dell'origine dati

Configura application.properties in modo che utilizzi il driver JDBC Spanner e collegalo a un database Spanner con dialetto PostgreSQL.

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

Esempio di applicazione completo

Per provare questa integrazione con un'applicazione di esempio, consulta Applicazione di esempio JDBC di Spring Data con Spanner PostgreSQL.

Passaggi successivi