如何使DataNucleus SchemaTool与Google CloudSQL配合使用?

时间:2013-10-31 23:14:10

标签: mysql jdo datanucleus google-cloud-sql

我在Ubuntu 13.10计算机上成功完成了DataNucleus Tutorial for JDO using RDBMS本地MySQL实例。

在尝试使用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。

2 个答案:

答案 0 :(得分:1)

现在您可以使用带有Cloud SQL的库存MySQL驱动程序,您应该使用它而不是旧的GoogleDriver。

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

希望这有帮助, 罗布

答案 1 :(得分:0)

特殊的Google JDBC驱动程序仅供Google App Engine应用程序使用。使用它时,CloudSQL实例不需要静态公共IP地址,这是CloudSQL的可计费功能。

阅读Google CloudSQL文档herehere后,这一切都变得很明显。