Mengintegrasikan Spanner dengan Spring Data JPA (dialek PostgreSQL)

Spring Data JPA, bagian dari keluarga Spring Data yang lebih besar, mempermudah implementasi repositori berbasis JPA. Spring Data JPA mendukung PostgreSQL dan berbagai sistem database lainnya. Library ini menambahkan lapisan abstraksi antara aplikasi dan database yang membuat aplikasi Anda lebih mudah di-port dari satu sistem database ke sistem database lainnya.

Menyiapkan Spring Data JPA untuk database dialek PostgreSQL Spanner

Anda dapat mengintegrasikan database dialek PostgreSQL Spanner dengan Spring Data JPA menggunakan dialek Hibernate PostgreSQL standar dan PGAdapter.

Untuk melihat contoh, lihat aplikasi contoh yang berfungsi lengkap di GitHub.

Dependensi

Dalam project Anda, tambahkan dependensi Apache Maven untuk Spring Data JPA, driver JDBC PostgreSQL, dan PGAdapter.

  <dependencies>
    <!-- Spring Data JPA -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!-- Add the PostgreSQL JDBC driver -->
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
    <!-- Add PGAdapter as a dependency, so we can start it in-process -->
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-spanner-pgadapter</artifactId>
    </dependency>
  </dependencies>

Memulai PGAdapter dalam proses

Tambahkan metode berikut ke aplikasi Anda untuk memulai PGAdapter langsung dari aplikasi Java Anda. PGAdapter berjalan di JVM yang sama dengan aplikasi Anda, dan aplikasi terhubung ke PGAdapter di localhost:port.

  /** Starts PGAdapter in-process and returns a reference to the server. */
  static ProxyServer startPGAdapter() {
    // Start PGAdapter using the default credentials of the runtime environment on port 9432.
    OptionsMetadata options = OptionsMetadata.newBuilder().setPort(9432).build();
    ProxyServer server = new ProxyServer(options);
    server.startServer();
    server.awaitRunning();

    return server;
  }

Konfigurasi

Konfigurasikan application.properties untuk menggunakan PostgreSQL Hibernate Dialect dan Driver JDBC PostgreSQL. Konfigurasikan Driver JDBC PostgreSQL untuk terhubung ke database dialek PostgreSQL melalui PGAdapter.

# The example uses the standard PostgreSQL Hibernate dialect.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

# Defining these properties here makes it a bit easier to build the connection string.
# Change these to match your Cloud Spanner PostgreSQL-dialect database.
spanner.project=my-project
spanner.instance=my-instance
spanner.database=my-database
# This setting ensures that PGAdapter automatically commits the current transaction if it encounters
# a DDL statement in a read/write transaction, and then executes the DDL statements as a single DDL
# batch. 
spanner.ddl_transaction_mode=options=-c%20spanner.ddl_transaction_mode=AutocommitExplicitTransaction

# This is the connection string to PGAdapter running in-process.
spring.datasource.url=jdbc:postgresql://localhost:9432/projects%2F${spanner.project}%2Finstances%2F${spanner.instance}%2Fdatabases%2F${spanner.database}?${spanner.ddl_transaction_mode}

# You can display SQL statements and stats for debugging if needed.
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

# Enable JDBC batching.
spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true

Aplikasi Contoh Lengkap

Aplikasi contoh yang berfungsi tersedia di GitHub.

Langkah selanjutnya