Integra Spanner con Spring Data JDBC (GoogleSQL)

Spring Data JDBC, que forma parte de la gran familia de Spring Data, facilita la implementación de repositorios basados en JDBC en tu aplicación. Agrega una capa de abstracción entre tu aplicación y tu base de datos que facilita el portabilidad de tu aplicación de un sistema de base de datos a otro.

Configura Spring Data JDBC para bases de datos de Spanner con dialecto GoogleSQL

Para integrar bases de datos con el dialecto GoogleSQL de Spanner a Spring Data JDBC, agrega un dialecto para GoogleSQL de Spanner a tu aplicación.

Configuración del dialecto

Spring Data JDBC selecciona el dialecto de la base de datos que usa en función del controlador de JDBC que se configuró como fuente de datos en Spring Data. Debes agregar un proveedor de dialecto adicional a tu aplicación para indicarle a JDBC de Spring Data que use el dialecto GoogleSQL cuando se use el controlador JDBC de Spanner:

public class SpannerDialectProvider implements DialectResolver.JdbcDialectProvider {
  @Override
  public Optional<Dialect> getDialect(JdbcOperations operations) {
    return Optional.ofNullable(
        operations.execute((ConnectionCallback<Dialect>) SpannerDialectProvider::getDialect));
  }

  @Nullable
  private static Dialect getDialect(Connection connection) throws SQLException {
    DatabaseMetaData metaData = connection.getMetaData();
    String name = metaData.getDatabaseProductName().toLowerCase(Locale.ENGLISH);
    if (name.contains("spanner")) {
      return SpannerDialect.INSTANCE;
    }
    return null;
  }
}

Este proveedor de dialecto se debe agregar al archivo spring.factories de tu aplicación:

org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=org.springframework.data.jdbc.repository.config.DialectResolver.DefaultDialectProvider,com.google.cloud.spanner.sample.SpannerDialectProvider

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

Dependencias

En tu proyecto, agrega dependencias de Apache Maven para Spring Data JDBC y el 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 Spanner con el dialecto GoogleSQL.

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 la aplicación de ejemplo de JDBC de Spring Data con Spanner GoogleSQL.

¿Qué sigue?