Integrar o Spanner ao Spring Data JDBC (PostgreSQL)

Spring Data JDBC, parte do A família de dados facilita a implementação de repositórios baseados em JDBC nos seus para o aplicativo. O Spring Data JDBC oferece suporte a PostgreSQL e outros sistemas de banco de dados. Ele adiciona uma camada de abstração entre o aplicativo e o banco de dados, facilitando a transferência do aplicativo de um sistema de banco de dados para outro.

Configurar o Spring Data JDBC para os bancos de dados de dialeto PostgreSQL do Spanner

É possível integrar bancos de dados de dialeto PostgreSQL do Spanner com o Spring Data JDBC usando o dialeto PostgreSQL padrão incluído Spring Data JDBC e o driver JDBC do Spanner.

Não é necessário usar PGAdapter para essa integração.

Configuração de dialeto

O Spring Data JDBC seleciona o dialeto do banco de dados usado com base no o driver JDBC configurado como uma fonte de dados no Spring Data. Você precisa adicionar outra classe de configuração do Spring ao seu aplicativo para instruir o Spring Data JDBC a usar o dialeto PostgreSQL quando o driver JDBC do Spanner é usado:

@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 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 conectar a um banco de dados de dialeto PostgreSQL do 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}

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 PostgreSQL (em inglês).

A seguir