Java 从GAE连接到MySQL实例时出现通信异常

Java 从GAE连接到MySQL实例时出现通信异常,java,mysql,google-app-engine,Java,Mysql,Google App Engine,我正在尝试从GAE(谷歌应用程序引擎)内部连接到我的MySQL DB实例,也在GAE上。从外面看效果很好 经过一周的搜索,我似乎找不到问题 如果没有MySQL连接代码,servlet在GAE上工作正常,没有错误 下面是一个简单的servlet: public class DBServlet extends HttpServlet { @Override public void doPost(HttpServletRequest req, HttpServletRe

我正在尝试从GAE(谷歌应用程序引擎)内部连接到我的MySQL DB实例,也在GAE上。从外面看效果很好

经过一周的搜索,我似乎找不到问题

如果没有MySQL连接代码,servlet在GAE上工作正常,没有错误

下面是一个简单的servlet:

public class DBServlet extends HttpServlet {
        @Override
        public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            try {
                Class.forName("com.mysql.jdbc.GoogleDriver");
                Connection conn = DriverManager.getConnection("jdbc:google:mysql://cloud-2280:mysql/account", "root", "");
                //Connection conn = DriverManager.getConnection("jdbc:google:mysql://cloud-1180:mysql/account?user=root");
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                        conn.close();
                    } catch (SQLException ex) {
                        Logger.getLogger(DBServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
在GAE上绑定时,我在GAE日志中得到:

com.conversedynamics.NewServlet doPost:null com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 通信链路故障最后一个数据包成功发送到 服务器在0毫秒前关闭。驱动程序没有收到任何数据包 从服务器。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:46) com.mysql.jdbc.Util.handleNewInstance(Util.java:411)位于 com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) 在com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:668)上 com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078)位于 com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2417)位于 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2450) 位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2235) 位于com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:818) JDBC4Connection.(JDBC4Connection.java:46)位于 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:46) com.mysql.jdbc.Util.handleNewInstance(Util.java:411)位于 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)位于 com.mysql.jdbc.GoogleNonRegisteringDriver$JdbcWrapper.getInstance(GoogleNonRegisteringDriver.java:282) 在 com.mysql.jdbc.GoogleNonRegisteringDriver.connect(GoogleNonRegisteringDriver.java:252) 位于java.sql.DriverManager.getConnection(DriverManager.java:571) java.sql.DriverManager.getConnection(DriverManager.java:233)位于 com.conversedynamics.NewServlet.doPost(NewServlet.java:90)位于 http.HttpServlet.service(HttpServlet.java:637)位于 http.HttpServlet.service(HttpServlet.java:717)位于 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 位于org.mortbay.jetty.Server.handle(Server.java:326) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 位于org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) 在 TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) 在 com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256) 在 com.google.tracing.TraceContext$AbstractTraceContextCallback.RunInheritedContextNonRef(TraceContext.java:308) 在 TraceContext$AbstractTraceContextCallback.RunInheritedContext(TraceContext.java:300) 在 TraceContext$TraceContextRunnable.run(TraceContext.java:441) 在java.lang.Thread.run(Thread.java:745)处,由以下原因引起: java.io.EOFEException:无法从服务器读取响应。期望 读取4个字节,在连接意外丢失之前读取0个字节。在 com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3039)位于 com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:592)

下面是appengine-web.xml

<application>cloud-2280</application>
    <version>1</version>
    <!--    <ssl-enabled>false</ssl-enabled>
    <sessions-enabled>true</sessions-enabled>
    -->
    <threadsafe>false</threadsafe>
    <use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>

通信链路故障
通常表示您无权连接

您是否为GAE应用程序授予了对CloudSQL实例的访问权限


您正在使用第二代云sql实例。这些还无法从应用程序引擎访问。使用第一代实例,您可以将应用添加为授权应用。我也有同样的问题。

我太高兴了,我可以跳过屋顶了!看来你走对了,科马!在控制台中,我看到“授权应用程序:无”。然后我单击“访问控制”和“授权”以及“+”,但是没有“授权的应用程序引擎应用程序”部分。我将在几分钟后添加屏幕截图。您的GAE和CSQL在同一个项目中吗?是的,它们在同一个项目中。现在似乎无法添加屏幕截图,SOF编辑脚本中似乎有一个小错误。已成功上载屏幕截图。(一个人应该点击底部的另一个保存按钮)。哇,这是非常有趣的Aerodyno。我用的是第二种方法