2012-08-03 8 views
5

He creado una piscina usando ConnectionPool así:Tiempo de espera para la conexión de objetos abandonados Apache piscina

puedo crear algunos TAKS a getConection de base de datos y excute ellos. Solo ejecuto mi aplicación solo 3 veces, la aplicación arroja Excepciones.

PoolableObjectFactory mySqlPoolableObjectFactory = new MySqlPoolableObjectFactory(
      host, dbName, user, password); 
    Config config = new GenericObjectPool.Config(); 
    config.maxActive = 10; 
    config.testOnBorrow = true; 
    config.testWhileIdle = true; 
    config.maxIdle = 5; 
    config.minIdle = 1; 
    config.maxWait = 10000; 
    config.timeBetweenEvictionRunsMillis = 10000; 
    config.minEvictableIdleTimeMillis = 60000; 

    GenericObjectPoolFactory genericObjectPoolFactory = new GenericObjectPoolFactory(
      mySqlPoolableObjectFactory, config); 
    return genericObjectPoolFactory.createPool(); 

public Connection getConnectionFromPool() { 

    Connection conn = null; 

    try { 

     conn = (Connection) connPool.borrowObject(); 

    } catch (Exception e) { 

     e.printStackTrace(); 

    } 

    return conn; 
} 

Pero cuando corro muchos hilos. Es tirar excepcion

java.util.NoSuchElementException: Timeout waiting for idle object 
    at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1174) 
    at vn.vccorp.bigdata.mysql.AdmarketPool.getConnectionFromPool(AdmarketPool.java:76) 
+3

¿devuelve objetos al grupo utilizando el método returnObject? –

+0

Sí, todos los días cerca de la conexión después de terminar mi sql usando vacío safeClose (Connection conn) pública { \t \t si (conn = null) { \t \t \t try { \t \t \t \t connPool.returnObject (conn); \t \t \t} catch (Exception e) { \t \t \t \t e.printStackTrace(); \t \t \t} \t \t}} \t – phuongdo

Respuesta

4
config.maxWait = 10000; 
config.timeBetweenEvictionRunsMillis = 10000; 
config.minEvictableIdleTimeMillis = 60000; 

Estos ajustes no tienen sentido en combinación. Solo esperará 10 segundos para una entrada agrupada, pero solo los desalojará cada 10 segundos. Los desalojos deben ocurrir con mucha más frecuencia que eso. Los valores predeterminados para estos son 30 segundos y 5 segundos respectivamente.

2

He comprobado mi código, me he perdido returnObject en algunos casos. Gracias Andrey Borisov

Cuestiones relacionadas