Integre o Spanner com o Spring Data JDBC (PostgreSQL)

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. O Spring Data JDBC suporta o PostgreSQL e outros sistemas de bases de dados. Adiciona uma camada de abstração entre a sua aplicação e a sua base de dados que facilita a portabilidade da sua aplicação de um sistema de base de dados para outro.

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

Pode integrar bases de dados com dialeto PostgreSQL do Spanner com o Spring Data JDBC usando o dialeto PostgreSQL padrão incluído no Spring Data JDBC e no controlador JDBC do Spanner.

Não precisa de usar o PGAdapter para esta integraçã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 uma classe de configuração do Spring adicional à sua aplicação para indicar ao Spring Data JDBC que use o dialeto PostgreSQL quando o controlador 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 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 a uma base de dados do 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}

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 Spanner PostgreSQL.

O que se segue?