【问题标题】:How do I get the DataNucleus SchemaTool working with Google CloudSQL?如何让 DataNucleus SchemaTool 与 Google CloudSQL 一起使用?
【发布时间】:2013-10-31 23:14:10
【问题描述】:

我在 Ubuntu 13.10 机器上使用本地 MySQL 实例成功完成了DataNucleus Tutorial for JDO using RDBMS

在尝试在 Google CloudSQL 实例上进行相同的工作时,我遇到了一些问题。

为了进行切换,我替换了以下内容:

<property name="javax.jdo.option.ConnectionURL" value="jdbc:mysql://127.0.0.1/nucleus?useServerPrepStmts=false"/>
<property name="javax.jdo.option.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>

...带有以下内容:

<property name="javax.jdo.option.ConnectionURL" value="jdbc:google:mysql://<my-project>:nucleus/nucleus?useServerPrepStmts=false"/>
<property name="javax.jdo.option.ConnectionDriverName" value="com.mysql.jdbc.GoogleDriver"/>

我将本地 MySQL 和 CloudSQL 实例设置为具有相同的凭据,因此不需要更改 javax.jdo.option.ConnectionUserName 和 javax.jdo.option.ConnectionPassword。

在 Google Cloud Console Cloud SQL my-project:nucleus MySQL 实例下,我创建了一个静态 IP 并将我的开发机器的 IP 地址列入白名单。我验证我能够通过“mysql -u root -p -h”本地连接到它。

当我尝试运行“mvn datanucleus:schema-create”时,我得到了这个:

[DEBUG] Exit code: 1
[DEBUG] --------------------
[DEBUG]  Standard output from the DataNucleus tool org.datanucleus.store.schema.SchemaTool :
[DEBUG] --------------------
[INFO] DataNucleus SchemaTool : Creation of the schema
An error was encountered creating a PersistenceManagerFactory : Error creating transactional connection factory - please consult the log for more information.

如果我将连接设置替换为以下内容,则它与本地 MySQL 实例的工作方式相同:

<property name="javax.jdo.option.ConnectionURL" value="jdbc:mysql://<Cloud SQL IP>/nucleus?useServerPrepStmts=false"/>
<property name="javax.jdo.option.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>

那么,我已经解决了这个问题,但为什么 GoogleDriver 不能解决这个问题?我对那个驱动程序内部发生的黑魔法一无所知,但我很好奇是否有办法让它工作,以及是否有理由我应该使用 GoogleDriver。

【问题讨论】:

  • 查看日志,它会告诉您为什么会出现问题。谁知道“谷歌驱动程序”里面有什么
  • 很抱歉。我粘贴了错误日志的错误部分(现已更正)。我将修改 log4j 设置,看看是否可以让它吐出更多信息。
  • 这是控制台输出,而不是(DataNucleus)日志。
  • 感谢您指出这一点。果然,有一个 datanucleus.log 说明驱动不在我的 CLASSPATH 中。

标签: mysql jdo datanucleus google-cloud-sql


【解决方案1】:

现在您可以将库存 MySQL 驱动程序与 Cloud SQL 一起使用,您应该使用它而不是旧版 GoogleDriver。

http://googlecloudplatform.blogspot.com/2013/10/google-cloud-sql-now-accessible-from-any-application-anywhere.html

希望这会有所帮助, 抢

【讨论】:

  • 感谢您的回答。我认为静态 IP 是可计费的,但我在任何地方都找不到关于这种情况的参考。也许我把它和 Google Compute Engine 搞混了。
  • 如果您的数据库未运行,IP 每小时收费 0.01 美元。请参阅developers.google.com/cloud-sql/pricing 的“实例 IP 地址”部分。为您的 CloudSQL 实例分配 IP 是一项新功能,您可能会看到过时的文档。
【解决方案2】:

特殊的 Google JDBC 驱动程序仅适用于 Google App Engine 应用程序。使用时,CloudSQL 实例不需要静态公网 IP,这是 CloudSQL 的计费特性。

阅读 Google CloudSQL 文档 herehere 后,这一切都变得显而易见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多