App Engine-Cloud Sql-java.Sql.SQLException:此连接已关闭
过了一段时间,我出现了这个错误,那么在给出我的singleton之前,如何确保连接没有断开呢 这是我的密码:App Engine-Cloud Sql-java.Sql.SQLException:此连接已关闭,java,database,google-app-engine,google-cloud-sql,Java,Database,Google App Engine,Google Cloud Sql,过了一段时间,我出现了这个错误,那么在给出我的singleton之前,如何确保连接没有断开呢 这是我的密码: public static Connection getInstance() throws Exception { if(connection != null) { return connection; } DriverManager.registerDriver(new AppEngineDriver()); conn
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)
位于的db.DbUser.exist(DbUser.java:209)
controller.CtrlUser.login(CtrlUser.java:343)位于
vidaao.ConnectServlet.doPost(ConnectServlet.java:36)位于
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)
在
com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
在
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在
com.google.appengine.tools.development.ResponseWriterFilter.doFilter(responseWriterFilter.java:110)
在
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在
com.google.appengine.tools.development.headerficationfilter.doFilter(headerficationfilter.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(TransactionCleanupFilter.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)
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
在
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
位于org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)位于
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)位于
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
在
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
我尝试使用isClosed()但不起作用,isValid()看起来似乎起作用,但每次调用都会减慢到数据库的连接速度,这是最好的方法,但是是的,它会ping数据库以确保连接有效
我注意到您没有在AppEngine中使用标准的mysql连接器/j驱动程序,我建议您尝试一下。它不会像旧的驱动程序那样超时服务器上的连接
有关AppEngine中要使用的JDBC驱动程序类的类名以及要使用的URL,请参阅
希望这有帮助,
Rob没有堆栈跟踪很难猜到发生了什么。这里我附加了我的堆栈跟踪@nambari谢谢,我刚刚实现了这个,我将在生产中尝试几天,看看它是否能解决问题!