【问题标题】:Oracle DB Connection Pooling in Multi Threaded Java Program多线程 Java 程序中的 Oracle 数据库连接池
【发布时间】:2015-04-03 05:26:18
【问题描述】:

我有一个使用ExecutorService(15 个线程)的多线程java 进程。每个线程调用存储过程将数据插入到表中,我的连接将跨 15 个线程池化,以便我可以同时在表上看到多个提交,但即使通过 15 个线程,我也只看到为一个活动线程建立了一个连接准备好等待。

司机:oracle.jdbc.driver.OracleDriver

以下是我的属性文件中的连接详细信息 网址、用户名、密码

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)

【问题讨论】:

    标签: java multithreading oracle jdbc connection-pooling


    【解决方案1】:

    Oracle 有通用连接池 (ucp.jar),它易于使用并且来自 oracle。您只需要在类路径中包含 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(); 
    

    【讨论】:

      【解决方案2】:

      您需要一个连接池。

      管理执行器池的对象将检查连接,将其提供给 ExecutorService,并在任务完成时关闭它,或者 ExecutorService 将管理它。请务必注意连接管理和 SQL 资源清理,否则在高请求量下您很快就会遇到问题。

      通常是 Java EE 应用服务器为您管理连接池,但听起来您并没有使用它。如果这是真的,也许Apache Database Connection Pool 会适合您的目的。

      【讨论】:

      • 当我使用 DriverManager.getConnection(url, username, password) 管理连接时如何设置连接。我需要使用不同的经理吗
      • 您不会以这种方式管理连接。这就是给你一个联系的原因。您将告诉池创建多个连接(池中的每个执行程序服务一个?)并将它们放在手边。他们给你一个例子来告诉你如何:svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc
      • 尝试使用下面的代码建立连接并跨所有线程池
      • 代码不属于 cmets。编辑您的原始问题以显示您在做什么。我对为你做这件事没有多大兴趣。
      猜你喜欢
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2021-06-08
      相关资源
      最近更新 更多