使用 Java 用戶端程式庫連線至 Spanner Omni

Spanner 的 Java 用戶端程式庫與 Spanner Omni 的運作方式,與其與 Spanner 的運作方式相同。本文說明如何設定 Java 用戶端程式庫,建立與 Spanner Omni 的安全連線。建立資料庫管理用戶端或資料庫用戶端時,您可以設定用戶端選項來建立這些連線。

Java 用戶端程式庫支援純文字、TLS 和 mTLS 連線。

詳情請參閱 Spanner 說明文件中的「開始使用 Java 版 Spanner」。

事前準備

如要在 Java 中開始使用 Spanner Omni,請使用 6.115.0 以上版本的 Java 用戶端程式庫。

如果您使用 Maven 而不使用物料清單 (BOM),請將下列指令新增至 pom.xml 檔案依附元件:

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-spanner</artifactId>
  <version>6.115.0</version>
</dependency>

設定 SpannerOptions 物件

設定 SpannerOptions 物件來建立 DatabaseClientDatabaseAdminClient 時,請使用 setExperimentalHost() 指定 Spanner Omni 端點。

使用純文字通訊

如要建立純文字連線,請指定 Spanner Omni 端點並使用 usePlainText() 方法:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setExperimentalHost("http://ENDPOINT") // Replace with your Spanner Omni endpoint
        .usePlainText()
        .build();
Spanner spanner = options.getService();

使用 TLS 設定

為 TLS 連線設定 SpannerOptions 物件時,您不需要設定任何其他憑證屬性。您必須將 CA 憑證新增至 Java 信任儲存區。

如要將 CA 憑證新增至 Java 信任儲存區,請使用下列指令:

sudo keytool -import -trustcacerts -file /.spanner/certs/ca.crt -alias spanner-ca -keystore $JAVA_HOME/lib/security/cacerts

或者,您也可以在執行應用程式時,直接傳遞自訂 CA 憑證存放區:

java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app

為維持相容性,請複製 Java 信任儲存區,並在此基礎上建構自訂信任儲存區:

cp $JAVA_HOME/lib/security/cacerts /PATH_TO_CUSTOM_CACERTS

使用 mTLS 設定

如要使用 mTLS 連線,請使用下列指令,將 Spanner Omni 產生的金鑰轉換為符合 Java 的格式:

openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt

以下範例說明如何設定 SpannerOptions 物件來使用用戶端憑證:

   SpannerOptions options =
        SpannerOptions.newBuilder()
           .setExperimentalHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
.useClientCert("PATH_TO_CLIENT_CERT","PATH_TO_CLIENT_CERT_KEY")
.build();
   Spanner spanner = options.getService();

建立資料庫

接著,請建立資料庫。視需要在程式庫程式碼中將專案指定為 default。舉例來說,建立 DatabaseId 時,請指定 default

DatabaseId dbId = DatabaseId.of("default", "default", DATABASE_ID);
DatabaseClient client = spanner.getDatabaseClient(dbId);