Integrar Spanner con Spring Data JDBC (GoogleSQL)

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

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

Puedes integrar bases de datos con dialecto GoogleSQL de Spanner con Spring Data JDBC añadiendo un dialecto para GoogleSQL de Spanner a tu aplicación.

Configuración de dialecto

Spring Data JDBC selecciona el dialecto de la base de datos que utiliza en función del controlador JDBC que se haya configurado como fuente de datos en Spring Data. Debe añadir un proveedor de dialecto adicional a su aplicación para indicar a Spring Data JDBC que use el dialecto de GoogleSQL cuando se utilice 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 debe añadirse 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 ejemplo funcional completa en GitHub.

Dependencias

En tu proyecto, añade las 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 que use el controlador JDBC de Spanner y se conecte a una base de datos de Spanner con 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 Aplicación de ejemplo de Spring Data JDBC con Spanner GoogleSQL.

Siguientes pasos