Integra Spanner con Spring Data JDBC (PostgreSQL)

Spring Data JDBC, que forma parte de la interfaz más grande de Google Data, facilita la implementación de repositorios basados en JDBC en tu y mantener la integridad de su aplicación. Spring Data JDBC es compatible con PostgreSQL de otros sistemas de bases de datos. Agrega una capa de abstracción entre tu aplicación y tu base de datos que facilita la portabilidad de tu aplicación desde una base de datos un sistema a otro.

Configura Spring Data JDBC para bases de datos de dialecto de PostgreSQL de Spanner

Puedes integrar bases de datos de dialecto PostgreSQL de Spanner con JDBC de Spring Data usando el dialecto estándar de PostgreSQL que se incluye con JDBC de Spring Data y el controlador de JDBC de Spanner.

No es necesario que uses PGAdapter para esta integración.

Configuración del dialecto

Spring Data JDBC selecciona el dialecto de la base de datos que usa según el controlador de JDBC configurado como fuente de datos en Spring Data. Debes agregar una clase de configuración de Spring adicional a tu aplicación para indica a Spring Data JDBC que use el dialecto PostgreSQL Cuando se usa el controlador de JDBC de 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())));
  }
}

Para ver un ejemplo, consulta la aplicación de muestra en funcionamiento completa en GitHub.

Dependencias

En tu proyecto, agrega las dependencias de Apache Maven para Spring Data JDBC y Controlador JDBC de 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>

Configuración de la fuente de datos

Configura application.properties para usar el controlador JDBC de Spanner y conectarte a una base de datos de dialecto de PostgreSQL de Spanner.

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

Aplicación de ejemplo completa

Para probar esta integración con una aplicación de ejemplo, consulta Aplicación de muestra de JDBC de Spring Data con Spanner PostgreSQL.

¿Qué sigue?