微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用jdbc连接到Google Cloud Spanner Emulator时,不需要不需要的凭据

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

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

URI:jdbc:cloudspanner:localhost:9010 / projects / my-project / instances / my-instance / databases / my-database

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

解决方法

您是正确的,该模拟器不需要任何凭据。出现此错误的原因是,JDBC驱动程序不知道您正在尝试连接到仿真器。相反,它认为您正在尝试连接到本地主机:9010上的某些服务器,该服务器可能是官方模拟器或任何其他模拟器或模拟服务器。

有两种方法可以连接到仿真器:

  1. SPANNER_EMULATOR_HOST环境变量设置为仿真器的地址。在这种情况下,该值为localhost:9010。设置此环境变量后,JDBC驱动程序知道您正在尝试连接到仿真器,并将确保不需要或不使用任何凭据。设置localhost:9010环境变量时,可以从JDBC连接URL中省略SPANNER_EMULATOR_HOST部分。
  2. 在JDBC连接URL中使用特定的主机名。这是您尝试在示例中使用的方法。为了指示JDBC驱动程序不要使用任何凭据,您需要在连接URL中包括usePlainText=true。这将告诉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));
     }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。