当前位置: 首页 > 知识库问答 >
问题:

App Engine-Cloud Sql-java.sql.SQLException:此连接已关闭

倪炎彬
2023-03-14

过了一会儿,我得到了这个错误,那么在给我的singleton之前,我如何确保连接没有死呢?

这是我的代码:

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(exception.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(Connection.java:54)在db.DbUser.exist(DbUser.java:209)在controller.CtrlUser.login(CtrlUser.java:343)在vidaao.ConnectServlet.doPost(ConnectServlet.java:36)在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)在java.servletorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)位于com.google.appengine.api.socket.dev.DevSocketFilter.dofiller(DevSocketFilter.java:74)位于org.mortpay.jett.servlet.servletHandlerr$CachedChain.doFilter(servlettHandler.java:1157)位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.headerficationFilter.dofiller(headerfictionFilter.java:34)在org.mortpay.jett.servlet.servletHandlert$CachedChain.doFilter(servlettHandler.java:115 7)在org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)在com.google.apphosting.utils.servlet.TransactionCleanupFilter.dofiller(transactioncleanupFiller.java:43)在org.mortbay.jetty.servlet.servletHandlder$CachedChain.doFilter(servlettHandler.java:1157)上在org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.BackendServersFilter.dofiller(BackendServersFilter.java:97)在org.mortpay.jett.servlet.servletHandlert$CachedChain.doFilter(servlettHandler.java:115)在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)位于org.mortpay.jett.servlet.SessionHandler.handle(SessionHandle.java:182),位于org.mortbay.jetty.handler.ContextHandler.handle(ContextHandle.java:765),位于com.google.appengine.tools.development.devappengineNewebappContext.handle(devappenginenewebappcontext.java:94)在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)在com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handles(JettyContainerServices.java:380),在org.mortbay.jetty.handler.handler.handler(handler WrapperJava:152),在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)位于org.mortpbay.jetty.httpConnections$RequestHandler.content(httpconnections.java:938)位于org.mortbay.jetty.HttpParser.parseNext(httpparsers.java:755),位于org.mortbay.jetty.HttpParser.java:218,位于org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)位于org.mortpay.thread.QueuedThreadPool$PoolThread.runs(QueuedThereadPool.java:582)

我试图使用 isClosed() 但不起作用,是Valid() 看起来它正在工作,但它每次都减慢了与数据库的连接

共有1个答案

龚凌
2023-03-14

调用连接#isValid将是最好的方法,但是是的,它会ping数据库以确保连接有效。

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

请参阅https://developers . Google . com/appengine/docs/Java/cloud-SQL/# Java _ Connect _ to _ your _ database,了解要在app engine中使用的JDBC驱动程序类的类名以及要使用的URL。

希望这有所帮助,罗柏

 类似资料:
  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 我坚持这个问题,如果有任何帮助是非常感谢的 请在以上问题上帮助我

  • 在尝试访问AWS RDS中的Postgres数据库时,我正在获取。异常是随机发生的(不是我运行代码的所有时间),如果在执行到达下面的代码之前需要一段时间,则更有可能发生: 连接材料: 相关POM:

  • 问题内容: 我使用Google Cloud SQL和MySQL服务器开发了一些GO库。当我导入`appengine / cloudsql时,发生以下错误。 我知道这个套件仅适用于Google App Engine,并不存在于其他任何地方。 我想知道如何在单个库中将其用于GAE和其他环境的标准sql库。 PS:我可以正确设置Google App Engine SDK。我的问题与此无关。希望我的库可以

  • 问题内容: 爱堆栈,我的第一个帖子完全出于挫败感。感谢您的评论! 创建了App Engine项目 在我的App Engine项目中创建了第二代MySQL实例 在MySQL实例中创建的数据库 在App Engine中,我激活-> Google Cloud Shell <-。(我正在console.cloud.google.com中的命令提示符下工作) 我已经复制了这个基本的GO程序以连接到我的MyS

  • 我已经构建了一个应用程序,使用会话维护。它使用JDBC 当应用程序部署在服务器(Apache Tomcat 6)上时。我可以登录和注销会话。工作完全正常。 现在,我让服务器继续运行24小时。现在,第二天我在输入凭据后尝试登录系统,单击登录按钮,我在网页上看到如下错误:(这是什么原因?) Http状态500 例外 组织。阿帕奇。贾斯珀。JasperException:处理JSP页面/登录时发生异常。