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;

}

Трассировки стека:

Я попытался использовать isClosed (), но не работает, а isValid () выглядит так, как будто он работает, но каждый раз он замедляет соединение с базой данных.

Вызов Connection # isValid было бы лучшим подходом, но да, он проверяет базу данных, чтобы убедиться, что соединение действительное.


person Jerome Ansia    schedule 06.11.2012    source источник
comment
Здесь я прикрепил трассировку стека @Nambari   -  person kosa    schedule 06.11.2012
comment
спасибо, я только что реализовал это, я попробую в продакшене на несколько дней, чтобы посмотреть, решит ли это проблему!   -  person Jerome Ansia    schedule 06.11.2012


Ответы (1)


Я заметил, что вы не используете стандартный драйвер mysql connector / j внутри AppEngine, я бы рекомендовал попробовать. Тайм-аут соединений на сервере не будет таким же, как у старого драйвера.

См. https://developers.google.com/appengine/docs/java/cloud-sql/#Java_Connect_to_your_database для имени класса класса драйвера JDBC для использования в AppEngine, а также URL-адреса для использования.

Надеюсь, это поможет, Роб

Без трассировки стека сложно догадаться, что происходит.

person Rob    schedule 12.12.2013
comment
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) в javax.servlet .http.HttpServlet.service (HttpServlet.java:637) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.handle) (ServletHolder.handle) (ServletHolder.handle) org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1166) в com.google.appengine.api.socket.dev.DevSocketFilter.doFilter (DevSocketFilter.java:74) в org.mo rtbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на com.google.appengine.tools.development.ResponseRewriterFilter.doFilter (ResponseRewriterFilter.java:110) на org.met.Servlet.java:110) CachedChain.doFilter (ServletHandler.java:1157) по адресу com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:34) по адресу org.mortbay.jetty.servlet.ServletHandler $ CachedFilterChain (ServletHandler $ CachedFilterChain (ServletHandler $ CachedFilterChain) 1157) на com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:61) на org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) .apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в com.google.Applevelopment. .doFilter (StaticFileFilter .java: 125) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter) в orgava. 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.Handler.Handler. (HandlerWrapper.java:152) в com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:380) в org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper). org.mortbay.jetty.Server.handle (Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) в org.mortbay.jetty.HttpConnection $ RequestHandler.content (Http: 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.nnio.SelectChannelEnd.hannel: ) в org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582) - person Jerome Ansia; 13.12.2013