Intégrer Spanner à Spring Data JDBC (PostgreSQL)

JDBC Spring Data, qui fait partie de l'environnement Spring de données, facilite l'implémentation de dépôts basés sur JDBC dans votre application. Spring Data JDBC est compatible avec PostgreSQL et d'autres systèmes de base de données. Il ajoute une couche d'abstraction entre votre application et votre base de données, ce qui facilite le transfert de votre application d'un système de base de données à un autre.

Configurer Spring Data JDBC pour les bases de données Spanner en dialecte PostgreSQL

Vous pouvez intégrer les bases de données de dialecte PostgreSQL de Spanner à Spring Data JDBC. en utilisant le dialecte PostgreSQL standard inclus dans JDBC Spring Data et le pilote JDBC Spanner.

Vous n'avez pas besoin d'utiliser PGAdapter pour cette intégration.

Configuration du dialecte

Spring Data JDBC sélectionne le dialecte de base de données qu'il utilise en fonction du pilote JDBC configuré en tant que source de données dans Spring Data. Vous devez ajouter une classe de configuration Spring supplémentaire à votre application pour demander à Spring Data JDBC d'utiliser le dialecte PostgreSQL lorsque le pilote JDBC Spanner est utilisé :

@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())));
  }
}

Pour voir un exemple, consultez l'application exemple fonctionnelle complète sur GitHub.

Dépendances

Dans votre projet, ajoutez les dépendances Apache Maven pour Spring Data JDBC et le pilote JDBC 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>

Configuration de la source de données

Configurer application.properties pour utiliser le pilote JDBC Spanner et se connecter à une base de données de dialecte PostgreSQL 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}

Exemple d'application complète

Pour essayer cette intégration avec un exemple d'application, consultez Exemple d'application JDBC Spring Data avec Spanner PostgreSQL.

Étape suivante