使用 jdbc 连接到 Google Cloud Spanner 模拟器时,需要不需要的凭据

2024-01-09

当我尝试使用 Google Cloud Spanner 开源 JDBC 驱动程序进行连接时,收到以下错误消息:

应用程序默认凭据不可用。如果在 Google Compute Engine 中运行,则它们可用。否则,必须定义环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向定义凭据的文件。看https://developers.google.com/accounts/docs/application-default-credentials https://developers.google.com/accounts/docs/application-default-credentials了解更多

URI:jdbc:云扳手:localhost:9010 /项目/我的项目/实例/按实例/数据库/我的数据库

我认为模拟器不需要任何凭据即可在本地工作。有办法解决这个错误吗?谢谢。


您是正确的,模拟器不需要任何凭据。您收到此错误的原因是 JDBC 驱动程序不知道您正在尝试连接到模拟器。相反,它认为您正在尝试连接到 localhost:9010 处的某个服务器,该服务器可能是官方模拟器或任何其他模拟器或模拟服务器。

连接模拟器有两种方式:

  1. 设置SPANNER_EMULATOR_HOST环境变量到模拟器的地址。在这种情况下,那就是localhost:9010。设置此环境变量后,JDBC 驱动程序知道您正在尝试连接到模拟器,并将确保不需要或使用任何凭据。您可以省略localhost:9010当您设置时,来自 JDBC 连接 URL 的部分SPANNER_EMULATOR_HOST环境变量。
  2. 在 JDBC 连接 URL 中使用特定主机名。这是您在示例中尝试使用的方法。为了指示 JDBC 驱动程序不使用任何凭证,你需要包括usePlainText=true在连接 URL 中。这将告诉 JDBC 驱动程序创建纯文本连接(即无 SSL)并且不使用任何凭据。

以下是如何通过在 URL 中指定主机名连接到模拟器的有效示例:

try (Connection connection = DriverManager.getConnection(
      "jdbc:cloudspanner://localhost:9010/projects/test-project/instances/test-instance/databases/test-db;usePlainText=true")) {
  try (ResultSet rs = connection.createStatement().executeQuery("SELECT 1")) {
    while (rs.next()) {
      System.out.printf("%d%n", rs.getLong(1));
     }
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jdbc 连接到 Google Cloud Spanner 模拟器时,需要不需要的凭据 的相关文章

随机推荐