c3p0数据库连接池问题

07-04-14 Xenium
我之前在我的程序里面使用了一个自己编写的数据库连接池,但程序常常莫名其妙的无法从池中取出新的连接,我以为是自己写的程序不对,所以下载了 c3p0作为新的数据库连接池库,但是问题依旧,开始工作的很好,但我重复访问几个从数据库中查询的页面以后,又出现了获取的Conncetion对象为空的问题,请问这是怎么回事?

是我c3p0设置的问题,程序的问题,或者是mysql的问题?

谢谢解答。

Xenium
2007-04-14 14:40
我查看了一下c3p0的设置,我把初始池大小改成了20,并且修改了mysql的最大连接数为1000(够大了吧),在用show processlist;查看mysql连接状况的时候,发现c3p0确实只使用了20个连接,我发现我用getConnection返回的每个连接都是新建的连接,这个池根本没有返回已经创建的连接,所以达到20个最大连接数以后就无法继续创建了。我的创建代码是:

public class DBConnectionManager {
	private static  DBConnectionManager instance = null;
	private static Logger log = Logger.getLogger(DBConnectionManager.class);
	ComboPooledDataSource cpds = null;
	private DBConnectionManager() {
		try{
			cpds = new ComboPooledDataSource();
			cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver            
			cpds.setJdbcUrl( "jdbc:mysql://localhost/uso" );
			cpds.setUser("root");                                  
			cpds.setPassword("123456");
		}catch(Exception ex){			
		}
	}
	public static synchronized DBConnectionManager getInstance() {
		if (instance == null){
			instance = new DBConnectionManager();
		}
		return instance;
	}
	public Connection getConnection() throws SQLException{
		log.info("GET CONNECTION");
		try{
			Connection conn = cpds.getConnection();
			log.info(conn);
			return conn;
		}catch(Exception ex){			
			return null;
		}
	}

}
<p>

Xenium
2007-04-14 18:23
已经解决,有一个调用很频繁的查询没有释放。

猜你喜欢