Integre o Spanner com o Spring Data JDBC (GoogleSQL)

O Spring Data JDBC, que faz parte da família Spring Data mais ampla, facilita a implementação de repositórios baseados em JDBC na sua aplicação. Adiciona uma camada de abstração entre a sua aplicação e a base de dados, o que facilita a portabilidade da aplicação de um sistema de base de dados para outro.

Configure o Spring Data JDBC para bases de dados com dialeto GoogleSQL do Spanner

Pode integrar bases de dados com o dialeto GoogleSQL do Spanner com o Spring Data JDBC adicionando um dialeto para o GoogleSQL do Spanner à sua aplicação.

Configuração do dialeto

O Spring Data JDBC seleciona o dialeto da base de dados que usa com base no controlador JDBC que foi configurado como uma origem de dados no Spring Data. Tem de adicionar um fornecedor de dialeto adicional à sua aplicação para indicar ao Spring Data JDBC que use o dialeto GoogleSQL quando o controlador JDBC do Spanner for usado:

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 fornecedor de dialetos tem de ser adicionado ao ficheiro spring.factories na sua aplicação:

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

Para ver um exemplo, consulte a aplicação de exemplo funcional completa no GitHub.

Dependências

No seu projeto, adicione dependências do Apache Maven para o Spring Data JDBC e o controlador JDBC do 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>

Configuração da origem de dados

Configure o application.properties para usar o controlador JDBC do Spanner e ligar-se a uma base de dados com dialeto GoogleSQL do Spanner.

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}

Aplicação de exemplo completa

Para experimentar esta integração com uma aplicação de exemplo, consulte o artigo Aplicação de exemplo do Spring Data JDBC com o GoogleSQL.

O que se segue?