2014-02-25 52 views
0

我正在開發一個財務應用程序,其中有很多代理非常頻繁地擊中數據庫(使用UI)。我正在使用Oracle UniversalConnectionPool進行數據庫連接。但很快它會與數據庫創建大量非活動會話。我沒有非活動會話的問題,因爲它將它們放入池中,但問題是在達到最大限制後,出現錯誤:「獲取連接時發生異常:oracle.ucp.UniversalConnectionPoolException:通用連接池中的所有連接都是在使用」這裏是代碼,請看看,並幫助Java-Oracle UniversalConnectionPool

private static PoolDataSource pds = null; 
static UniversalConnectionPoolManager mgr = null; 
try{ 
    pds = PoolDataSourceFactory.getPoolDataSource(); 
    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource"); 
     pds.setConnectionPoolName("JDBC_UCP"); 

     pds.setInitialPoolSize(2); 
     pds.setMinPoolSize(2); 
     pds.setMaxPoolSize(10); 

     pds.setURL("jdbc:oracle:thin:@192.168.4.5:1521:CDIM"); 
     pds.setUser("baseline"); 
     pds.setPassword("baseline"); 

     mgr = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager(); 
     mgr.createConnectionPool((UniversalConnectionPoolAdapter)pds); 
     mgr.startConnectionPool("JDBC_UCP"); 
    }catch(Exception e){ 
     LogManager.error(DBConnection.class, "getConnection : " + e.getMessage()); 
    } 

得到這樣

pds.getConnection(); 

這樣

con.close(); 
con = null; 
關閉連接連接

謝謝

+0

請檢查連接是否正在關閉,以防數據庫調用異常。 – Jk1

+0

不知道,你如何關閉你的連接。但是,如果您使用純JDBC,請確保在finally塊中執行此操作。另外,如果你使用任何ORM實現或者Spring DAO,他們會爲你做。 – IndoKnight

+0

這已被妥善處理,最終關閉連接。 –

回答

0

如果你確定你正在關閉連接(盡你所能),你還應該考慮一些UCP的連接管理功能(例如,被棄用連接超時和連接收穫)。有一篇很好的文章討論了UCP optimization