我整个星期都在研究这个问题的解决方案,虽然已经有类似问题的解决方案,但没有一个能够直接解决和纠正这个问题。
我使用Google App Engine和Google Cloud SQL创建了一个Web应用程序项目。 使用eclipse谷歌插件和本地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,所以我确信这不是问题。
答案 0 :(得分:36)
我遇到了同样的问题。
我通过在appengine-java-sdk-x.x.x / lib / impl中删除mysql .jar解决了这个问题。
答案 1 :(得分:9)
马特的回答给了我很多帮助,我相信这是一个更完整的解释。
我可以验证您是否可以使用本地MYSQL实例与在开发模式下运行的Google App Engine一起使用,以免在开发过程中产生与Google的Cloud SQL选项相关的即将到来的成本。
首先,正如Matt所说,你必须将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 \蚀\插件\ 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)
答案 2 :(得分:2)
AFAIK如果您使用的是GAE,则无法使用JDBC驱动程序。我不知道它如何在日食中起作用,而Socet类在GAE中受到限制。 您应该使用内部GAE驱动程序而不是mysql JDBC。
com.google.appengine.api.rdbms.AppEngineDriver
然后,在eclipse中,您可以配置与example中的本地mysql数据库的连接 另请参阅此example如何配置
编译为纯GWT并使用JDBC将其放入Tomcat应该可以,但不能作为GAE应用程序。
答案 3 :(得分:1)
我刚刚在Juno Service Release 1 Build id:20121004-1855上使用GAE SDK1.7.5在新机器上安装了Eclipse + GPE4.2,并被迫在appengine-java-sdk-xxx / lib /上复制JDBC驱动程序IMPL。 最初我忘记了这一点,我花了大约2天时间调试我的代码。
如果有更多有关GPE页面问题的信息,那就太好了。能够向Google提供更多信息会很高兴。
答案 4 :(得分:0)
嗯,在阅读了所有为你们写的内容,并阅读了另外一些内容后,我终于可以从GAE的Google SQL Cloud实例表中列出我的数据了,我只是按照这个陡峭的方式进行操作!...
1.-我按照这个例子:[Using Google Cloud SQL with 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-x.x.x / lib / impl。
3.-我按照此处所述配置项目Create a New Web App with Cloud SQL Support
4.-我按照Configuring Access
中的描述配置了我的Google SQL实例5.-最后,我按照Uploading Your Application
所述部署了项目我可以在本地运行它也很有效。
嗯,我希望这有帮助,谢谢!