שילוב של Spanner עם Spring Data JDBC ‏ (PostgreSQL)

Spring Data JDBC, חלק מהמשפחה הגדולה יותר של Spring Data, מאפשרת להטמיע בקלות מאגרי מידע מבוססי JDBC באפליקציה. ‫Spring Data JDBC תומך ב-PostgreSQL ובמערכות מסדי נתונים אחרות. הוא מוסיף שכבת הפשטה בין האפליקציה לבין מסד הנתונים, וכך מקל על העברת האפליקציה ממערכת מסד נתונים אחת לאחרת.

הגדרה של Spring Data JDBC למסדי נתונים ב-Spanner עם ניב PostgreSQL

אתם יכולים לשלב מסדי נתונים של Spanner עם ניב PostgreSQL עם Spring Data JDBC באמצעות ניב PostgreSQL הסטנדרטי שכלול ב-Spring Data JDBC ובדרייבר Spanner JDBC.

לא צריך להשתמש ב-PGAdapter לשילוב הזה.

הגדרת הדיאלקט

‫Spring Data JDBC בוחר את הניב של מסד הנתונים שבו הוא משתמש על סמך מנהל ההתקן של JDBC שהוגדר כמקור נתונים ב-Spring Data. כדי להנחות את Spring Data JDBC להשתמש בניב PostgreSQL כשמשתמשים במנהל ההתקנים של Spanner JDBC, צריך להוסיף לאפליקציה מחלקה נוספת של הגדרת Spring:

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

כדי לראות דוגמה, אפשר לעיין באפליקציה לדוגמה שעובדת המלאה ב-GitHub.

תלויות

בפרויקט, מוסיפים תלות ב-Apache Maven עבור Spring Data JDBC ומנהל ההתקן Spanner JDBC.

<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>

הגדרת מקור נתונים

מגדירים את application.properties כך שישתמש במנהל ההתקן Spanner JDBC ויתחבר למסד נתונים של Spanner עם ניב PostgreSQL.

# 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}

אפליקציה לדוגמה מלאה

כדי לנסות את השילוב הזה עם אפליקציה לדוגמה, אפשר לעיין במאמר Spring Data JDBC Sample Application with Spanner PostgreSQL.

המאמרים הבאים