我在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。
答案 0 :(得分:1)
现在您可以使用带有Cloud SQL的库存MySQL驱动程序,您应该使用它而不是旧的GoogleDriver。
希望这有帮助, 罗布
答案 1 :(得分:0)