19

我整周都在研究这个问题的解决方案,虽然有类似问题的解决方案,但没有一个可以直接解决和纠正这个问题。

我使用 Google App Engine 和 Google Cloud SQL 创建了一个 Web 应用程序项目。使用 eclipse Google 插件和本地 MySQL 服务器运行 GAE 应用程序,该应用程序运行良好。

从命令行运行应用程序时使用: -

sudo /opt/appengine-java-sdk-1.6.1/bin/dev_appserver.sh --jvm_flag=-Drdbms.server=local --jvm_flag=-Drdbms.driver=com.mysql.jdbc.Driver --jvm_flag=-Drdbms.url=jdbc:mysql://localhost:3306/twincam?user=root --port=7070 /home/ben/workspace/Twincam/war

我得到以下信息: -

java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.registerDriver(LocalRdbmsServiceLocalDriver.java:95)

我的类路径引用了我的用户库引用的 /Twincam/war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar 中的 mysql-connector.jar,如下面的 .classpath 文件和目录结构:-

   <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-javadoc.jar"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-sources.jar"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1.jar"/>
    <classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>

在此处输入图像描述

更新:我检查了文件权限,所有权限都设置为默认 664,所以我相信这不是问题。

4

5 回答 5

36

我有同样的问题。

我通过在 appengine-java-sdk-xxx/lib/impl 中删除 mysql .jar 来解决它。

于 2012-02-28T14:12:29.487 回答
9

马特的回答对我帮助很大,我相信这是一个更完整的解释。

我可以验证您是否可以让本地 MYSQL 实例与在开发模式下运行的 Google App Engine 一起使用,以免在开发时产生与 Google 的 Cloud SQL 选项相关的即将发生的成本。

首先,正如马特所说,您必须将 mysql-connector jar 放入 APPENGINE_HOME/lib/impl 中。

我在窗户上。我首先找到了我的 SDK 所在的位置。在包资源管理器中的 Eclipse 项目中,我右键单击“App Engine SDK [App Engine - 1.6.4]”,从下拉菜单中选择“属性”,然后在出现的弹出窗口中单击蓝色的“配置 SDK... “ 关联。

这显示了我的 App Engine SDK 的位置。在 Windows 资源管理器窗口中转到该文件夹​​,打开 lib/impl 并放入从 GAE eclipse 项目中复制的 mysql-connector jar。我的路径是:

C:\Software\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37\appengine-java-sdk-1.6.4\lib\impl

根据此处的说明(https://developers.google.com/eclipse/docs/cloudsql-createapp),您应该将 java 代码连接字符串指向 prod(jdbc:google:rdbms://... 而不是jdbc:mysql://...) 但您需要进入 Eclipse 项目属性、Google、App Engine、Google Cloud SQL 并在“开发 SQL 实例(由本地开发服务器使用)”下选择单选按钮“使用 MySQL 实例”。下次您启动 GAE 时,您的 java 代码中的连接字符串将被忽略,以支持您的本地 MySQL 主机。

确保 MySQL 服务正在运行,一切顺利。

这花了我更长的时间才弄清楚。我认为关键来自 Google Docs,如果您不理解/使用此信息,您将尝试使用 mysql jdbc 字符串并遇到套接字权限错误,因为 GAE 无法转到端口 3306,除非您按照我的描述进行操作:

您不需要在代码中显式连接到 Development SQL 实例 - 当您在开发服务器中运行应用程序时,这会自动为您完成。要连接的开发 SQL 实例在运行时由 GPE 通过 VM 参数自动传递到您的开发服务器。

(我上传了 4 张图片来帮助解释这个问题,只有在我完成后它才告诉我你需要 10 个声望点来加载图片——jeesh)

于 2012-05-19T16:21:31.013 回答
2

AFAIK 如果您使用的是 GAE,那么您不能使用 JDBC 驱动程序。我不知道它如何在 Eclipse 中工作,而 Soet 类在 GAE 中受到限制。您应该使用内部 GAE 驱动程序而不是 mysql JDBC。

com.google.appengine.api.rdbms.AppEngineDriver

然后,在 Eclipse 中,您可以配置与本地 mysql 数据库的连接,如示例所示, 另请参阅此示例如何配置

编译为纯 GWT 并使用 JDBC 将其放入 Tomcat 应该可以工作,但不能作为 GAE 应用程序。

于 2012-01-22T23:46:39.357 回答
1

我刚刚在 Juno Service Release 1 Build id:20121004-1855 上使用 GAE SDK1.7.5 在新机器上安装了 Eclipse + GPE4.2,并被迫在 appengine-java-sdk-xxx/lib/impl 处复制 JDBC 驱动程序。最初我忘记了这一点,我花了大约 2 天时间调试我的代码。

如果有更多关于 GPE 页面问题的信息,那就太好了。能够谷歌更多信息会很好。

于 2013-02-25T17:27:56.247 回答
0

好吧,在阅读了为你们编写的所有内容并阅读了其他内容之后,我终于可以使用 GAE 从我的 Google SQL Cloud 实例的表中列出我的数据,我只是按照这个陡峭的路线进行操作!...

1.- 我按照这个例子:[使用谷歌云 SQL 和 App Engine Java SDK

但在 guestbook.jsp 我添加了这一行:

<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %>

然后我将 URL 连接更改为此,在我的情况下没有用户名。

url = "jdbc:google:rdbms:INSTANCE_NAME/DATABASE_NAME";

我也评论了这一行

// Class.forName("com.mysql.jdbc.GoogleDriver");

2.- 如上所述,我将 mysql-connector.jar 复制到 appengine-java-sdk-xxx/lib/impl 中。

3.- 我按照此处所述配置项目创建具有 Cloud SQL 支持的新 Web 应用程序

4.- 我配置了我的 Google SQL 实例,如此处所述配置访问

5.- 最后我按照这里的描述部署了项目上传您的应用程序

我可以在本地运行它并且效果很好。

好吧,我希望这会有所帮助,谢谢!

于 2013-09-11T06:40:56.367 回答