Integrare Spanner con Spring Data JDBC (PostgreSQL)

Spring Data JDBC, che fa parte della più grande famiglia Spring Data, semplifica l'implementazione di repository basati su JDBC nella tua 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.

Configurare Spring Data JDBC per i database in dialetto 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.

Per questa integrazione non è necessario utilizzare PGAdapter.

Configurazione del dialetto

Spring Data JDBC seleziona il dialetto del database utilizzato in base al driver JDBC 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 vedere un esempio, consulta la completa applicazione di esempio funzionante 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}

Applicazione di esempio completa

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

Passaggi successivi