App Engine -Cloud SQL -Java.sql.sqlexception:此连接已关闭



一段时间后,我遇到了这个错误,那么我如何确保连接在给我的单例之前没有死?

这是我的代码:

public static Connection getInstance() throws Exception {
    if(connection != null) {
        return connection;
    }
        DriverManager.registerDriver(new AppEngineDriver());
        connection = DriverManager.getConnection("jdbc:google:rdbms://"+instanceName+"/vidaao");
    return connection;
}

堆栈跟踪:

java.sql.sqlexception:此连接已关闭。在 com.google.cloud.sql.jdbc.internal.exceptions.newconnectionclosedexception(exceptions.java:52) 在 com.google.cloud.sql.jdbc.connection.throwifnotopen(Connection.java:633) 在 com.google.cloud.sql.jdbc.connection.getholdability(Connection.java:194) 在 com.google.cloud.sql.jdbc.connection.createstatement(Connection.java:123) 在 com.google.cloud.sql.jdbc.connection.createstatement(Connection.java:54) at DB.DBUSER.EXIST(DBUSER.JAVA:209) controller.ctrluser.login(ctrluser.java:343)at vidaao.connectservlet.dopost(connectservlet.java:36)at javax.servlet.http.httpservlet.service(httpservlet.java:637)at javax.servlet.http.httpservlet.service(httpservlet.java:717)at org.mortbay.jetty.servlet.servletholder.handle(servletholder.java:511) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1166) 在 com.google.appengine.api.socket.dev.dev.devsocketfilter.dofilter(devsocketfilter.java:74) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.appengine.tools.development.responserewriterfilter.dofilter(wherctereWriterFilter.java:110) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.appengine.tools.development.headerverificationfilter.dofilter(headerverificationfilter.java:34) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.appengine.api.blobstore.dev.serveblobfilter.dofilter(serveblobfilter.java:61) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.apphosting.utils.servlet.transactioncleanupfilter.dofilter(trassactionCleanupFilter.java:43) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.appengine.tools.development.staticfilefilter.dofilter(staticfilefilter.java:125) 在 org.mortbay.jetty.servlet.servlethandler $ cachedchain.dofilter(servlethandler.java:1157) 在 com.google.appengine.tools.development.backendserversfilter.dofilter(BackendServersFilter.java:97) 在 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) 在 com.google.appengine.tools.development.devappenginewebappcontext.handle(devappenginewebappcontext.java:94) 在 org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) 在 com.google.appengine.tools.development.jettycontainerservice $ apiproxyhandler.handle(jettycontainerservice.java:380) 在 org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152) 请访问org.mortbay.jetty.server.handle(server.java:326)at org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:542) 在 org.mortbay.jetty.httpconnection $ requesthandler.content(httpconnection.java:938) atorg.mortbay.jetty.httpparser.parsenext(httpparser.java:755)at org.mortbay.jetty.httpparser.parseavailable(httpparser.java:218)at org.mortbay.jetty.httpconnection.handle(httpconnection.java:404)at org.mortbay.io.nio.SelectChannelendPoint.run(selectChannelendPoint.java:409) 在 org.mortbay.thread.queuedthreadpool $ poolthread.run(queuedthreadpool.java:582)

我尝试使用isclosed(),但不起作用,iSvalid()看起来像是在起作用,但是每次都会减慢与数据库的连接

调用连接#iSvalid将是最好的方法,但是,是的,它为数据库提供了ping,以确保连接有效。

我注意到您没有在附录内使用标准的MySQL连接器/J驱动程序,我建议您尝试一下。它不会像旧驱动程序一样超时服务器上的连接。

请参阅https://developers.google.com/appengine/docs/java/cloud-sql/#java_connect_to_your_database for JDBC驱动程序类的classname for appengine in appengine in appengine in url以及使用。

> > >

希望这会有所帮助,Rob

相关内容

  • 没有找到相关文章

最新更新