Spring Data JPA, Teil der größeren Spring Data-Familie, erleichtert die Implementierung von JPA-basierten Repositorys. Spring Data JPA unterstützt PostgreSQL und viele andere Datenbanksysteme. Es wird eine Abstraktionsebene zwischen Ihrer Anwendung und Ihrer Datenbank eingefügt, wodurch sich Ihre Anwendung leichter von einem Datenbanksystem in ein anderes portieren lässt.
Spring Data JPA für Spanner-Datenbanken mit PostgreSQL-Dialekt einrichten
Sie können Spanner-Datenbanken mit PostgreSQL-Dialekt mit Spring Data JPA integrieren. Dazu verwenden Sie den standardmäßigen PostgreSQL-Hibernate-Dialekt und PGAdapter.
Ein Beispiel finden Sie in der vollständigen funktionierenden Beispielanwendung auf GitHub.
Abhängigkeiten
Fügen Sie Ihrem Projekt Apache Maven-Abhängigkeiten für Spring Data JPA, den PostgreSQL-JDBC-Treiber und PGAdapter hinzu.
<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>
PGAdapter als Verarbeitungsprozess starten
Fügen Sie Ihrer Anwendung die folgende Methode hinzu, um PGAdapter direkt über Ihre Java-Anwendung zu starten. PGAdapter wird in derselben JVM wie Ihre Anwendung ausgeführt und die Anwendung stellt eine Verbindung zu PGAdapter auf localhost:port her.
/** 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;
}
Konfiguration
Konfigurieren Sie application.properties für die Verwendung des PostgreSQL-Hibernate-Dialekts und des PostgreSQL-JDBC-Treibers. Konfigurieren Sie den PostgreSQL JDBC-Treiber, um über PGAdapter eine Verbindung zu einer Datenbank mit PostgreSQL-Dialekt herzustellen.
# 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
Vollständige Beispielanwendung
Eine funktionierende Beispielanwendung ist auf GitHub verfügbar.
Nächste Schritte
- Weitere Informationen zu Spring Data JPA
- Hibernate ORM
- Repository für PGAdapter auf GitHub ansehen
- Ein GitHub-Problem senden, um einen Fehler zu melden oder eine Frage zu PGAdapter zu stellen
- Spanner in Spring Data JPA einbinden (GoogleSQL-Dialekt)