title: Database connection pool[Hikari] initialize error
body: <p>I am trying to configure HikariCP for my web application. I am not using any frameworks, it is a plain simple java web app. When I tried to establish a connection through normal JDBC it was successful and I was able to perform all database operations.</p>
  
  <p>However, when I am trying to get a connection with a connection pool, I get an exception after initialization which I have no clue about.</p>
  
  <p>Below is the config that I am using, I am initializing it in a context listener. I am running on Java 1.7, with a Tomcat container using HikariCP Java 6 dependency 2.3.2</p>
  
  <pre><code>import java.sql.Connection;
  import java.sql.SQLException;
  import javax.servlet.ServletContextEvent;
  import javax.servlet.ServletContextListener;
  import com.mkgcorp.travelweb.util.TLog;
  import com.sun.jersey.core.util.Base64;
  import com.zaxxer.hikari.HikariConfig;
  import com.zaxxer.hikari.HikariDataSource;
  
  public class CPInit implements ServletContextListener{
  
      private final static String TAG = CPInit.class.getSimpleName();
      private static HikariConfig mConfig;
      private static HikariDataSource mDataSource;
  
      public static String POOL_NAME = "TripPool";
      public static int POOL_SIZE = 10;
      public static int TIME_OUT = 30*1000;
      public static int MIN_IDLE_SIZE = 2;
      public static boolean isDebuggable;
  
      private String PASSWORD = "YWRtaW4=";
  
  
      public CPInit(){
          String string = new String(Base64.decode(PASSWORD));
          TLog.info(TAG, "Password = " + string);
          mConfig = new HikariConfig();
          mConfig.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
          mConfig.addDataSourceProperty("url", "jdbc:mysql://127.0.0.1:3306/travlemate");
          mConfig.addDataSourceProperty("cachePrepStmts", "true");
          mConfig.addDataSourceProperty("prepStmtCacheSize", "250");
          mConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
          mConfig.addDataSourceProperty("useServerPrepStmts", "true");
          mConfig.addDataSourceProperty("user", "root");
          mConfig.addDataSourceProperty("password", string);
          mConfig.setMaximumPoolSize(POOL_SIZE);
          mConfig.setMinimumIdle(MIN_IDLE_SIZE);
          mConfig.setPoolName(POOL_NAME);
          mConfig.setConnectionTimeout(TIME_OUT);
          mConfig.setAutoCommit(true);
          mConfig.setInitializationFailFast(false);
          mDataSource = new HikariDataSource(mConfig);
      }
  
      @Override
      public void contextDestroyed(ServletContextEvent arg0) {
          TLog.info(TAG, "CP has being destroyed");
          mDataSource.close();
  
      }
  
      public static Connection getConnection() throws SQLException{
          TLog.info(TAG, "get data connection");
          return mDataSource.getConnection();
      }
  
      @Override
      public void contextInitialized(ServletContextEvent arg0) {
          TLog.info(TAG, "CP has been initilizing");
          String parm = arg0.getServletContext().getInitParameter("debugging");
          isDebuggable = Boolean.valueOf(parm);
      }
  
  }
  </code></pre>
  
  <p>This is the exception that I am getting:</p>
  
  <pre><code>java.sql.SQLTimeoutException: Timeout after 30005ms of waiting for a connection.
      at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:228)
      at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:183)
      at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:91)
      at com.mkgcorp.travelweb.controller.CPInit.getConnection(CPInit.java:68)
      at com.mkgcorp.travelweb.data.Database.getConnection(Database.java:47)
      at com.mkgcorp.travelweb.data.DataManager.getConnection(DataManager.java:100)
      at com.mkgcorp.travelweb.data.DataManager.authenticateUser(DataManager.java:135)
      at com.mkgcorp.travelweb.webservices.TripResource.isUserValid(TripResource.java:169)
      at com.mkgcorp.travelweb.webservices.SyncResource.getContactStatus(SyncResource.java:70)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
      at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
      at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
      at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
      at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
      at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
      at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
      at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
      at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
      at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
      at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
      at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
      at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
      at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540)
      at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
      at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
      at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      at java.lang.Thread.run(Unknown Source)
  Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured
      at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:399)
      at com.zaxxer.hikari.pool.HikariPool$1AddConnection.run(HikariPool.java:78)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      ... 1 more
  </code></pre>