簡體   English   中英

多線程Java程序中的Oracle DB連接池

[英]Oracle DB Connection Pooling in Multi Threaded Java Program

我有一個使用ExecutorService (15個線程)多線程的Java進程。 每個線程都調用存儲過程以將數據插入表中,我的連接被池化到15個線程中,這樣我就可以同時看到表上的多個提交,但是我只看到為一個活動線程建立了一個連接,即使有15個線程也是如此。准備好並等待。

驅動程序: oracle.jdbc.driver.OracleDriver

以下是我的屬性文件中的連接詳細信息url,用戶名,密碼

Class.forName(DB_DRIVER); 

DataSource oracleDataSource = new DriverManagerDataSource(DB_CONNECTION, DB_USER,DB_PASSWORD); 

ObjectPool objectPool = new GenericObjectPool(); 

DataSourceConnectionFactory datasourceConnectionFactory = new DataSourceConnectionFactory(oracleDataSource); 

PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(datasourceConnectionFactory, objectPool, null, null, false, true); 
objectPool.setFactory(poolableConnectionFactory); 

PoolingDataSource datasource = new PoolingDataSource(objectPool)

Oracle具有易於使用且來自oracle的通用連接池(ucp.jar)。 您只需要在類路徑中包括ucp.jar以及ojdbc6.jar或ojdbc7.jar。

請參閱《 UCP參考指南》: http : //docs.oracle.com/database/121/JJUCP/toc.htm

PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setMinPoolSize(10);
pds.setMaxPoolSize(50);
Connection conn=pds.getConnection(); 

您需要一個連接池。

管理執行程序池的對象將簽出連接,將其提供給ExecutorService,然后在任務完成時將其關閉,否則ExecutorService將對其進行管理。 確保特別注意連接管理和SQL資源清理,否則在高請求量下很快就會遇到問題。

通常是Java EE應用服務器為您管理連接池,但聽起來您好像並沒有使用其中一個。 如果是這樣,那么Apache Database Connection Pool可能適合您的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM