1

我正在尝试打开与 Google Cloud Spanner 数据库的 JDBC 连接,但收到以下错误消息:

java.lang.IllegalArgumentException:此服务需要项目 ID,但无法从构建器或环境中确定。请使用构建器设置项目 ID。

我的 JDBC URL 如下:

jdbc:cloudspanner://localhost;Project=project-id;Instance=instance-id;Database=database-name;PvtKeyPath=path-to-key-file

如果我Project从 URL 中删除该属性,则会收到以下异常:

java.sql.SQLNonTransientConnectionException:[Simba]JDBC 连接被拒绝:[Simba]JDBC 所需的连接键:项目;[Simba]JDBC 可选连接键:语言、模式

所以看起来驱动程序确实拿起了我的项目 ID,但不知何故不接受它。我已经检查并仔细检查了我的项目 ID 确实等于我在 Google 上创建的项目 ID,我还尝试将值更改为项目名称而不是项目 ID,但无济于事。

有没有人有一个有效的 URL 示例?

编辑:它似乎与对私钥文件的引用有关。如果我将环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向我的私钥文件,则可以成功建立连接。如果我删除这个环境变量,我会得到上述异常。

4

2 回答 2

1

您使用的是哪个版本的驱动程序?在最新版本中,如果您在 URL 中指定凭证文件的路径,则无需设置 GOOGLE_APPLICATION_CREDENTIALS。

于 2017-03-06T09:26:22.810 回答
0

由于 Google 提供的 JDBC Driver 非常有限(不支持 DML 和 DDL statemetns),所以我编写了自己的 JDBC Driver。该驱动程序旨在与启用 JPA/Hibernate 的应用程序一起使用。驱动程序可以在这里找到:https ://github.com/olavloite/spanner-jdbc

此驱动程序支持与 Google 提供的驱动程序相同类型的 URL,包括 PvtKeyPath 属性。

于 2017-03-07T06:05:01.737 回答