Integrar o Spanner com o Spring Data JDBC (GoogleSQL)

O Spring Data JDBC, parte da família mais ampla do Spring Data, facilita a implementação de repositórios baseados em JDBC no seu aplicativo. Ele adiciona uma camada de abstração entre o aplicativo e o banco de dados, facilitando a portabilidade de um sistema de banco de dados para outro.

Configurar o Spring Data JDBC para bancos de dados com dialeto GoogleSQL do Spanner

É possível integrar bancos de dados com o dialeto GoogleSQL do Spanner ao Spring Data JDBC adicionando um dialeto do Spanner GoogleSQL ao seu aplicativo.

Configuração de dialeto

O Spring Data JDBC seleciona o dialeto do banco de dados usado com base no driver JDBC configurado como uma fonte de dados no Spring Data. É necessário adicionar um provedor de dialeto ao seu aplicativo para instruir o Spring Data JDBC a usar o dialeto GoogleSQL quando o driver JDBC do Spanner é 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;
  }
}

Esse provedor de dialeto precisa ser adicionado ao arquivo spring.factories no aplicativo:

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

Para conferir um exemplo, consulte o aplicativo de exemplo completo no GitHub.

Dependências

No projeto, adicione as dependências do Apache Maven para o Spring Data JDBC e o driver 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 fonte de dados

Configure application.properties para usar o driver JDBC do Spanner e se conectar a um banco de dados do 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}

Exemplo de aplicativo completo

Para testar essa integração com um aplicativo de exemplo, consulte Aplicativo de exemplo do Spring Data JDBC com o Spanner GoogleSQL.

A seguir