2016-08-31 6 views
0

Tomcatライブラリで実装された接続プールからの接続を要求するプログラムを実行しようとすると「接続が多すぎます」というエラーが表示されます。約50接続後にエラーが発生します。エラー:Java - MySQLで接続が閉じられない

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" 

はここで、それはここで単純なクエリ

public void test() throws Exception 
    { 

     Connection con = getConnection(); 
      try (Statement st = con.createStatement()) { 
       ResultSet rs = st.executeQuery("select * from actor"); 

      while (rs.next()) { 
        System.out.println(rs.getString("actor_id") +" "+ rs.getString("first_name")+" "+ rs.getString("last_name")); 
       } 

      rs.close(); 
      st.close(); 

     } finally { 
     if (con!=null) try { 
      con.close(); 
     } 

     catch (SQLException ignore) { 

      System.out.println("***SQL EXC" + ignore.getMessage()); 
     } 
     } 
    } 
0を実行テスト()関数は、接続

public static void main(String[] args) throws Exception{ 
     SimplePoolExample ex = new SimplePoolExample(); 

     int cont = 100; 

     while (cont > 0) 
     { 
     ex.test(); 
     System.out.println(cont); 
     cont--; 
     } 

    } 

を実行するループメインクラスですしています

とEDIT

public Connection getConnection() throws SQLException 
    { 
     DataSource datasource = new DataSource(); 
     datasource.setPoolProperties(p); 

     Connection con = null; 
     con = datasource.getConnection(); 

     return con; 
    } 

接続プールからの接続を要求するのgetConnection()クラス:あなたは完全に新しい接続を作成している

public void setPoolProperties() 
    {  

     p.setUrl("jdbc:mysql://localhost:3306/sakila"); 
     p.setDriverClassName("com.mysql.jdbc.Driver"); 
     p.setUsername("user"); 
     p.setPassword("pwd"); 
     p.setJmxEnabled(true); // utilities to manage JVM 
     p.setTestWhileIdle(false); // test idle connections 
     p.setTestOnBorrow(true); // 
     p.setValidationQuery("SELECT 1"); // any test requires it 
     p.setTestOnReturn(false); 
     p.setValidationInterval(30000); // cada cuanto hace test 
     p.setTimeBetweenEvictionRunsMillis(30000); // how often check idle and abandoned conn 
     p.setMaxActive(50); 
     p.setInitialSize(10); 
     p.setMaxWait(50); 
     p.setRemoveAbandonedTimeout(60); // OJO: max query last 
     p.setMinEvictableIdleTimeMillis(30000); // time to consider a conn idle 
     p.setMaxIdle(10); 
     p.setMinIdle(10); 
     p.setLogAbandoned(true); // log stack traces .. overhead 
     p.setRemoveAbandoned(true); //abandoned timeout ... 
     p.setJdbcInterceptors(
     "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+ 
     "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); 
    } 
+2

接続プールはいくつ接続できますか?これをMySqlがサポートできる接続数よりも少ない最大接続数に制限したい場合があります。 – alfasin

+0

投稿をプール設定で更新しました。これは、MySqlでサポートされている最大接続数(デフォルトでは151)に制限されていると思います。 – Jose

答えて

4

:ここでは、接続プールの設定がされています毎回getConnection()が呼び出されます。

代わりにDataSourceの単一の共有インスタンスを使用する必要があります。

関連する問題