0 0

BoneCP连接池0

  最近遇到点问题,页面要进行数据库的实时查询,参数大概八九百个,还要进行不同的处理,所以查询是分类进行的,同时需要进行很多查询,每次查询都创建一个连接,用完之后就关闭,但是jvm并不是close之后就直接关闭连接的,这就导致了连接数越界。
   然后我就开始使用连接池,准备用BoneCP,请问用完之后直接connection.close()就可以了吗,连接池不用关闭或者处理吗,连接一直占着吗?如果这样服务器开的时间较长,内存会不会暴?

问题补充://初始化连接池
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl(prop.getProperty("url"));//url连接
config.setUsername(prop.getProperty("username"));//连接用户名
config.setPassword(prop.getProperty("password"));//连接密码
//连接池在每个分区中的最大连接数
config.setMinConnectionsPerPartition(Integer.parseInt(prop.getProperty("minSize")));//5
//连接池在每个分区中的最小连接数
config.setMaxConnectionsPerPartition(Integer.parseInt(prop.getProperty("maxSize")));//10
//连接释放处理
config.setReleaseHelperThreads(3);
//当连接池中的连接耗尽时BoneCP一次同时获取的连接数
config.setAcquireIncrement(5);
//设置分区
config.setPartitionCount(1);
//设置连接空闲时间(分钟)
config.setIdleMaxAge(3);
//每60s检查所有连接池中的空闲连接
config.setIdleConnectionTestPeriod(60);
try {
boneCp = new BoneCP(config);
} catch (SQLException e) {
e.printStackTrace();
}
2013年12月30日 11:20

5个答案 按时间排序 按投票排序

0 0

要理解连接池的原理, 你反过来思考一下:

1. 如果创建了一个connection, 要重用, 那么这个connection使用完之后, 是否关闭, 看配置, 若链接数不超限, 那么就放到池里, 以备使用, 若超过设置的最大链接数之后, 就直接关闭.

2. 因此, 如果你使用连接池, 那么你只需要配置好链接的一些参数, 例如最小链接数, 最大链接数等, 应用端一般这样调用:

Connection conn = null;
try {
     conn = getConnection();
} finally {
     if (conn != null) {
          conn.close();
     }
}


你只需要保证get一个链接之后, 使用完之后, close掉这个链接, 就行了. 具体链接的状态, 你使用的连接池的包会维护的, 除非是你连接池的数目不限制才可能有内存问题, 但是一般的链接数都会设置限制的, 一般来说, 10-20个链接就够用了.

2013年12月31日 12:33
0 0

自己封装的JDBC么?如果是自己封装的还是要显式的关闭连接的。要不然会导致内存泄漏。但是如果用spring jdbc的话,别人已经封装好。就不需要connection.close()这样的操作了。

2013年12月31日 08:42
0 0

池最大优势就是重复利用,不是真正意义上close,而是回收,又再次放到avaiable的队列

2013年12月31日 07:47
0 0

不管spring和hibernate,这些东西我不是很懂。但是不管用什么,只要你使用数据库连接池,一定会随应用的启动而启动,或第一次获取连接时启动,随应用关闭而关闭。

2013年12月30日 14:38
0 0

当然是这样。连接池随应用的启动而启动,随应用的关闭而关闭。开的时间多长,内存又有什么关系呢。

2013年12月30日 13:26

相关推荐

Global site tag (gtag.js) - Google Analytics