【发布时间】:2013-11-18 17:23:05
【问题描述】:
我们正在尝试使用数据库开发视角从 Eclipse 连接到 Google Cloud SQL。为此,我尝试添加一个新的数据库连接,我能够成功地为在我的机器上运行的本地 MySQL 实例添加。
这样做的动机是我们目前针对本地实例运行 JUnit 测试。但是,我们正在切换到 Hibernate,并希望确保我们所有的配置文件都能与 Cloud SQL 一起使用。作为我一直在使用的一般指南:
https://developers.google.com/appengine/articles/using_hibernate
我们略有不同,因为我们使用的是 hibernate.cfg.xml 而不是 persistence.xml,但我认为这实际上不会影响当前仅连接到数据库的问题。从另一个答案以及一些 Google 文档中,我知道我不能使用 com.google.appengine.api.rdbms.AppEngineDriver,因为它需要从 AppEngine 实例运行。相反,我试图按照这里的指示进行操作:
https://developers.google.com/cloud-sql/docs/external
并且正在使用 com.mysql.jdbc.Driver。
我已经为我的 Cloud SQL 实例分配了一个 IP 地址,并将我当前的 IP 地址添加到了白名单中,如下所述:
https://developers.google.com/cloud-sql/docs/access-control#appaccess
我的驱动是我在本地实例上成功使用的Connector/J驱动,我使用的url是:
jdbc:google:rdbms://my-app:my-cloud-sql-instance/myDatabase
我得到的依据:
https://developers.google.com/appengine/articles/using_hibernate
添加连接并设置信息后,我单击测试连接,它在我的本地实例上成功运行。但是,这会引发以下错误:
java.lang.Exception: Connection failed with unspecified error.
at org.eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.java:110)
at org.eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.java:54)
at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.open(JDBCConnection.java:73)
at org.eclipse.datatools.enablement.internal.mysql.connection.JDBCMySQLConnectionFactory.createConnection(JDBCMySQLConnectionFactory.java:28)
at org.eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.java:83)
at org.eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.java:359)
at org.eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.java:76)
at org.eclipse.datatools.connectivity.ui.PingJob.run(PingJob.java:59)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
显然这不是很有帮助。
我尝试过修改 url,尝试了许多用户(都不需要密码,所以我将密码字段留空),以及针对不同版本的 MySQL 的不同版本的驱动程序。没有任何效果。
这样做可能存在更深层次的问题,例如如何在 hibernate.cfg.xml 的测试和部署版本之间轻松切换,而我没有很好的答案。我只是计划手动将它们编辑回 AppEngineDriver,这意味着即使 JUnit 测试通过了,我也可能会在那时遇到更多配置问题。尽管如此,我认为建立一个允许 JUnit 测试的 Cloud SQL 连接将是朝着正确方向迈出的一步。我会很感激任何意见!
【问题讨论】:
-
那么您在哪里输入您尝试连接的云 sql 实例的 IP?我相信该连接字符串(使用您的云 sql 实例名称)仅适用于 AppEngine。
-
我真是个笨蛋。这正是问题所在。令人欣慰的是,连接字符串现在看起来不那么不透明了。工作 url 是“jdbc:mysql://myCloudSqlIpAddress:3306/myDatabaseName”。胡安,如果您将您的评论作为解决方案添加,我将接受答案。
标签: google-app-engine google-cloud-sql