采用JDBC连接池遇到的问题
2007-04-27 23:42
337 查看
[align=left]最近采用多线程使用JDBC连接数据库时,遇到如下问题,当连接次数达到一定次数后,就出现了如下错误提示[/align]
[align=left][/align]
[align=left][/align]
[align=left]17:18:14,569 DEBUG BasicResourcePool:1831 - An exception occurred while acquiring a poolable resource. Will retry.[/align]
[align=left]com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections[/align]
[align=left] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2822)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:777)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3216)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1147)[/align]
[align=left] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2595)[/align]
[align=left] at com.mysql.jdbc.Connection.<init>(Connection.java:1509)[/align]
[align=left] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)[/align]
[align=left] at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)[/align]
[align=left] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)[/align]
[align=left] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)[/align]
[align=left]17:18:14,569 DEBUG BasicResourcePool:404 - incremented pending_acquires: 3[/align]
[align=left]17:18:14,584 DEBUG BasicResourcePool:1831 - An exception occurred while acquiring a poolable resource. Will retry.[/align]
[align=left]com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"[/align]
[align=left] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:962)[/align]
[align=left] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2595)[/align]
[align=left] at com.mysql.jdbc.Connection.<init>(Connection.java:1509)[/align]
[align=left] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)[/align]
[align=left] at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)[/align]
[align=left] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)[/align]
[align=left] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)[/align]
这个是已经达到了数据库得最大连接个数,解决的方法可以设置数据库得max_connections的个数。另外一种就是可以采取连接池得方式,从连接池中获取Connection对象,由连接池来管理和数据库得连接。
c3p0-0.9.1.1就是提供了一个连接池得管理,c3p0 - JDBC3 Connection and Statement Pooling。
下栽网址 http://sourceforge.net/projects/c3p0/
使用得时候,把解压后lib/c3p0-0.9.1.1.jar 加入到ClASSPATH中中就行了。在里面提供了几个Example
线程和非线程的
DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb", "swaldman", "test-password");
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled ); 你还可以自己设置数据源的一些属性
Map overrides = new HashMap();
overrides.put("maxStatements", "200");
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );
获取Connection对象
Connection conn = ds_pooled.getConnection();
[align=left][/align]
[align=left][/align]
[align=left]17:18:14,569 DEBUG BasicResourcePool:1831 - An exception occurred while acquiring a poolable resource. Will retry.[/align]
[align=left]com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections[/align]
[align=left] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2822)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:777)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3216)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1147)[/align]
[align=left] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2595)[/align]
[align=left] at com.mysql.jdbc.Connection.<init>(Connection.java:1509)[/align]
[align=left] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)[/align]
[align=left] at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)[/align]
[align=left] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)[/align]
[align=left] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)[/align]
[align=left]17:18:14,569 DEBUG BasicResourcePool:404 - incremented pending_acquires: 3[/align]
[align=left]17:18:14,584 DEBUG BasicResourcePool:1831 - An exception occurred while acquiring a poolable resource. Will retry.[/align]
[align=left]com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"[/align]
[align=left] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:921)[/align]
[align=left] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:962)[/align]
[align=left] at com.mysql.jdbc.Connection.createNewIO(Connection.java:2595)[/align]
[align=left] at com.mysql.jdbc.Connection.<init>(Connection.java:1509)[/align]
[align=left] at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)[/align]
[align=left] at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)[/align]
[align=left] at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)[/align]
[align=left] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)[/align]
[align=left] at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)[/align]
[align=left] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)[/align]
这个是已经达到了数据库得最大连接个数,解决的方法可以设置数据库得max_connections的个数。另外一种就是可以采取连接池得方式,从连接池中获取Connection对象,由连接池来管理和数据库得连接。
c3p0-0.9.1.1就是提供了一个连接池得管理,c3p0 - JDBC3 Connection and Statement Pooling。
下栽网址 http://sourceforge.net/projects/c3p0/
使用得时候,把解压后lib/c3p0-0.9.1.1.jar 加入到ClASSPATH中中就行了。在里面提供了几个Example
线程和非线程的
DataSource ds_unpooled = DataSources.unpooledDataSource("jdbc:postgresql://localhost/testdb", "swaldman", "test-password");
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled ); 你还可以自己设置数据源的一些属性
Map overrides = new HashMap();
overrides.put("maxStatements", "200");
DataSource ds_pooled = DataSources.pooledDataSource( ds_unpooled, overrides );
获取Connection对象
Connection conn = ds_pooled.getConnection();
相关文章推荐
- JDBC用ResultSet访问大量数据时会遇到的问题
- JDBC访问Oracle数据库时遇到Connection Reset问题的分析
- Android通过JDBC连接MySql数据库时遇到的问题(1)
- MSSQL2000的官方JDBC在应用动态代理机制遇到的异常问题解决
- Spring的Dao单元测试及运行遇到的Could not load driverClass ${jdbc.driverClass}问题解决
- weblogic下配置连接池遇到的问题
- 帆软报表FineReport中数据连接的JDBC连接池属性问题
- 模拟TAB 采用 attachEvent 遇到的IE兼容问题
- java通过JDBC连接SQL Server2017遇到的一些问题
- [讨论]当我采用动态sql绑定datagrid分页的时候,遇到的问题
- 掌游 新项目:我采用NH连接MySql所遇到的问题
- JDBC连接数据库遇到的问题(小白的错误)
- Spring 中配置proxool连接池遇到的问题
- 使用JDBC遇到SQL关键字in的问题
- 遇到的JDBC的一个问题
- 采用Json字符串,往服务器回传大量富文本数据时,需要注意的地方,最近开发时遇到的问题。
- JDBC用ResultSet访问大量数据时会遇到的问题
- java项目连接mysql数据库的jdbc遇到的问题
- tomcat 6.0.18+oracle11g配置数据源连接池遇到的问题
- Eclipse连接JDBC数据库遇到的问题