Spring Data JPA, que forma parte de la familia Spring Data, facilita la implementación de repositorios basados en JPA. Spring Data JPA es compatible con PostgreSQL y con una amplia gama de otros sistemas de bases de datos. Añade una capa de abstracción entre tu aplicación y tu base de datos que facilita la portabilidad de tu aplicación de un sistema de base de datos a otro.
Configurar Spring Data JPA para bases de datos con dialecto PostgreSQL de Spanner
Puedes integrar bases de datos de Spanner con dialecto PostgreSQL en Spring Data JPA mediante el dialecto estándar de PostgreSQL Hibernate y PGAdapter.
Para ver un ejemplo, consulta la aplicación de ejemplo funcional completa en GitHub.
Dependencias
En tu proyecto, añade dependencias de Apache Maven para Spring Data JPA, el controlador JDBC de PostgreSQL y 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>
Iniciar PGAdapter en el proceso
Añade el siguiente método a tu aplicación para iniciar PGAdapter
directamente desde tu aplicación Java. PGAdapter se ejecuta en la misma JVM que tu aplicación, y la aplicación se conecta a PGAdapter en 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;
}
Configuración
Configura application.properties
para que use el dialecto Hibernate de PostgreSQL y el controlador JDBC de PostgreSQL. Configura el controlador JDBC de PostgreSQL para conectarte a una base de datos con dialecto PostgreSQL a través de 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
Aplicación de ejemplo completa
En GitHub hay una aplicación de muestra que funciona.
Siguientes pasos
- Más información sobre Spring Data JPA
- Consulta más información sobre Hibernate ORM.
- Consulta el repositorio de PGAdapter en GitHub.
- Registra una incidencia en GitHub para informar de un error o hacer una pregunta sobre PGAdapter.
- Integra Spanner con Spring Data JPA (dialecto de GoogleSQL).