c3p0 ThreadLocal 报错too many Connection

NCS123456 2012-11-06 06:31:42
public class DBUtil {
private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();

/**
* 取得数据库连接
* @return
*/
public static Connection getConnection() {
Connection conn = null;
conn = threadLocal.get();
if(conn==null) {
conn = ConnectionManager.getInstance().getConn();
threadLocal.set(conn);
}
return conn;
}

public static void closeConn() {
Connection conn = threadLocal.get();
try {
if(conn!=null && !conn.isClosed()) {
conn.close();
threadLocal.remove();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String args[]) {
for(int i=0;i<30;i++) {
Connection conn = getConnection();
closeConn();
System.out.println(i+"="+conn);
}
}
}

public class ConnectionManager {
private static ConnectionManager instance;
private ConnectionManager(){}

public synchronized Connection getConn() {
Connection conn = null;
ComboPooledDataSource ds = new ComboPooledDataSource("userApp");

try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

public static ConnectionManager getInstance() {
if(instance==null) {
instance = new ConnectionManager();
}
return instance;
}

}



c3p0配置
[code=text]<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/examtest?useUnicode=true&characterEncoding=utf-8</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">10</property>
<property name="acquireRetryAttempts">30</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">40</property>
<property name="maxStatements">100</property>
<property name="maxStatementsPerConnection">5</property>
<property name="checkoutTimeout">1000</property>
<property name="idleConnectionTestPeriod">18000</property>
<property name="maxIdleTime">25000</property>code]


一运行就只能取得10次连接,11以后就报错
java.sql.SQLException: Data source rejected establishment of connection, message from server: "Too many connections"
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1018)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2568)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.initializeAutomaticTestTable(C3P0PooledConnectionPoolManager.java:772)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.createPooledConnectionPool(C3P0PooledConnectionPoolManager.java:696)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:257)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:271)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at com.tom.util.ConnectionManager.getConn(ConnectionManager.java:17)
at com.tom.util.DBUtil.getConnection(DBUtil.java:19)
at com.tom.util.DBUtil.main(DBUtil.java:115)29=null
...全文
98 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧