使用 Java 客户端库连接到 Spanner Omni

Spanner 的 Java 客户端库与 Spanner Omni 的运作方式与 Spanner 相同。本文档介绍了如何通过配置 Java 客户端库来建立与 Spanner Omni 的安全连接。您可以在创建数据库管理客户端或数据库客户端时设置客户端选项,以建立这些连接。

Java 客户端库支持纯文本、TLS 和 mTLS 连接。

如需了解详情,请参阅 Spanner 文档中的 Java 版 Spanner 使用入门

准备工作

如需开始在 Java 中使用 Spanner Omni,请使用 Java 客户端库 6.115.0 版或更高版本。

如果您使用的是不含物料清单 (BOM) 的 Maven,请将以下代码添加到 pom.xml 文件依赖项中:

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

配置 SpannerOptions 对象

在配置 SpannerOptions 对象以创建 DatabaseClientDatabaseAdminClient时,请使用 指定 Spanner Omni 端点。setExperimentalHost()

使用纯文本通信

如需建立纯文本连接,请指定 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);