將 Spanner 與 Spring Data JDBC (GoogleSQL) 整合

Spring Data JDBC 是 Spring Data 系列的一部分,可讓您在應用程式中輕鬆實作以 JDBC 為基礎的存放區。它會在應用程式和資料庫之間新增抽象層,讓應用程式更容易從一個資料庫系統移植到另一個資料庫系統。

為 Spanner GoogleSQL 方言資料庫設定 Spring Data JDBC

您可以將 Spanner GoogleSQL 方言資料庫與 Spring Data JDBC 整合,方法是在應用程式中新增 Spanner GoogleSQL 方言。

方言設定

Spring Data JDBC 會根據在 Spring Data 中已設定為資料來源的 JDBC 驅動程式,選取要使用的資料庫方言。您必須在應用程式中新增其他方言提供者,才能在使用 Spanner JDBC 驅動程式時,指示 Spring Data JDBC 使用 GoogleSQL 方言:

public class SpannerDialectProvider implements DialectResolver.JdbcDialectProvider {
  @Override
  public Optional<Dialect> getDialect(JdbcOperations operations) {
    return Optional.ofNullable(
        operations.execute((ConnectionCallback<Dialect>) SpannerDialectProvider::getDialect));
  }

  @Nullable
  private static Dialect getDialect(Connection connection) throws SQLException {
    DatabaseMetaData metaData = connection.getMetaData();
    String name = metaData.getDatabaseProductName().toLowerCase(Locale.ENGLISH);
    if (name.contains("spanner")) {
      return SpannerDialect.INSTANCE;
    }
    return null;
  }
}

您必須將這個方言提供者新增至應用程式中的 spring.factories 檔案:

org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=org.springframework.data.jdbc.repository.config.DialectResolver.DefaultDialectProvider,com.google.cloud.spanner.sample.SpannerDialectProvider

如需查看範例,請參閱 GitHub 上的完整應用程式範例

依附元件

在專案中,為 Spring Data JDBCSpanner JDBC 驅動程式新增 Apache Maven 依附元件。

<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 GoogleSQL 方言資料庫。

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 範例應用程式,搭配使用 Spanner 和 GoogleSQL」。

後續步驟