2016-07-31 349 views
3

我正在使用HikariCP 2.4.7連接池。一切都很好,剛開始申請後,但是沒有援引getConnection()一段時間後,我得到當我試圖getConnection()此錯誤:HikariPool-1 - 連接不可用,請求超時後

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 42734ms. 
    at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:555) 
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:188) 
    at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:147) 
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:99) 
    at pl.airly.database.ComplexOperations.getSensorDataFromArea(ComplexOperations.java:310) 
    at pl.airly.database.ComplexOperations.getMeasurementsInAreaWithinTimeFrame(ComplexOperations.java:201) 
    at pl.airly.ResponseGenerator.getResponseAdequateToRequest(ResponseGenerator.java:139) 
    at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

在啓動過程中,我初始化HikariDataSource

hikariDataSource = new HikariDataSource(); 
hikariDataSource.setDriverClassName("org.postgresql.Driver"); 
hikariDataSource.setUsername(DATABASE_USER_NAME); 
hikariDataSource.setPassword(DATABASE_PASSWORD); 
hikariDataSource.setJdbcUrl(DATABASE_URL); 
hikariDataSource.setLeakDetectionThreshold(5000); 

而且那麼我就這樣使用它:

try(java.sql.Connection conn = Connection.hikariDataSource.getConnection()) { 
      Record1 record1 = DSL.using(conn).select(SENSOR.ID) //jOOQ 
        .from(SENSOR) 
        .where(SENSOR.ID.equal(1)) 
        .limit(1) 
        .fetchOne(); 
      Debug.println(record1.getValue(0).toString()); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

我在做什麼錯?如何解決這個問題?

編輯:

添加此解決了這個問題:

hikariDataSource.setIdleTimeout(60000); 
hikariDataSource.setConnectionTimeout(60000); 
hikariDataSource.setValidationTimeout(3000); 
hikariDataSource.setLoginTimeout(5); 
hikariDataSource.setMaxLifetime(60000); 

這可能是一些與服務器關閉連接HikariCP做之前,但我不知道連接。任何意見,將不勝感激。

+1

是ü可以調試和縮小問題? – singhsumit

+1

不幸的是,我想可能是服務器在HikariCP之前關閉連接,然而,在我發生這個問題之後,我決定以另一種方式處理連接。 – Defozo

回答

0

我說不是我不是一個Java程序員開始,你可以嘗試關閉jOOQ DSL也:

try(java.sql.Connection conn = Connection.hikariDataSource.getConnection()) { 
     try (Record1 record1 = DSL.using(conn).select(SENSOR.ID)) { 
       .from(SENSOR) 
       .where(SENSOR.ID.equal(1)) 
       .limit(1) 
       .fetchOne(); 
     Debug.println(record1.getValue(0).toString()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
}