title: SpringBoot:GenericJDBCException: Unable to acquire JDBC Connection
body: <p>I am connecting to mysql database by creating DataSource dynamically with following properties, Its working fine, but after some time it keeps giving me the error "Unable to acquire JDBC Connection".</p>
  
  <pre><code> package com.test.db;
  
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.Primary;
  import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  import org.springframework.orm.jpa.JpaTransactionManager;
  import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  import org.springframework.transaction.PlatformTransactionManager;
  
  import java.util.HashMap;
  
  @Configuration
  @EnableJpaRepositories(basePackages = "com.test.master", entityManagerFactoryRef = "userMasterEntityManager", transactionManagerRef = "userMasterTransactionManager")
  public class MasterDBConfig {
  
      @Bean
      @Primary
      public LocalContainerEntityManagerFactoryBean userMasterEntityManager() {
          LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
          em.setDataSource(dataSource());
          em.setPackagesToScan(new String[] { "com.test.master" });
  
          HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
          em.setJpaVendorAdapter(vendorAdapter);
  
          HashMap&lt;String, Object&gt; properties = new HashMap&lt;&gt;();
          properties.put("hibernate.hbm2ddl.auto", "create");
          properties.put("hibernate.id.new_generator_mappings", "false");
          properties.put("hibernate.show_sql", "true");
          properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
          properties.put("hibernate.testOnBorrow", "true");
          properties.put("hibernate.validationQuery", "SELECT 1");
          properties.put("hibernate.testWhileIdle", "true");
  //        properties.put("hibernate.timeBetweenEvictionRunsMillis", "3600000");
          properties.put("hibernate.connection.autoReconnect", "true");
          properties.put("hibernate.connection.autoReconnectForPools", "true");
  
          em.setJpaPropertyMap(properties);
  
          return em;
      }
  
      @Primary
      @Bean(name = "dataSource")
      public DataSourceRouter dataSource() {
          return new DataSourceRouter();
      }
  
      @Primary
      @Bean
      public PlatformTransactionManager userMasterTransactionManager() {
          JpaTransactionManager transactionManager = new JpaTransactionManager();
          transactionManager.setEntityManagerFactory(userMasterEntityManager().getObject());
          return transactionManager;
      }
  }
  </code></pre>
  
  <p>Its been hosted in AWS with Tomcat environment. DB is in RDS of AWS. </p>
  
  <p><strong>UPDATE:</strong> <br>
  Caused by: </p>
  
  <pre><code>com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
      at com.mysql.jdbc.Util.getInstance(Util.java:408)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873)
      at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710)
      at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
      at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
      at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
      at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
      at com.mysql.jdbc.ConnectionImpl.&lt;init&gt;(ConnectionImpl.java:806)
      at com.mysql.jdbc.JDBC4Connection.&lt;init&gt;(JDBC4Connection.java:47)
      at sun.reflect.GeneratedConstructorAccessor39.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
      at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
      at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310)
      at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:732)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:664)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479)
      at org.apache.tomcat.jdbc.pool.ConnectionPool.&lt;init&gt;(ConnectionPool.java:154)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)
      at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131)
  </code></pre>