关于BoneCP 连接数的一些疑惑
public static void main(String argsp[]) throws Exception{ BCPool db=new BCPool(); Connection conn= db.getConnection(); Connection conn1= db.getConnection(); Connection conn2= db.getConnection(); Connection conn3= db.getConnection(); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); conn.close(); conn1.close(); conn2.close(); conn3.close(); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); System.out.println("*********************"); System.out.println("已经创建的数据库连接"+bcPool.getTotalCreatedConnections()); System.out.println("已创建未使用"+bcPool.getTotalFree()); System.out.println("正在使用"+bcPool.getTotalLeased()); System.out.println("*********************"); } minConnectionsPerPartition=5 maxConnectionsPerPartition=10
测试boneCP 时,比如我设置最小数据库连接为5 最大为10
先获取4个连接 再关闭4个
就这样运行了几次
然后用getTotalCreatedConnections() 输出 居然是7
getTotalFree() 也是7
getTotalLeased() 是0
7作何解释?然后第二个问题是:我关闭的时候,他是不是会有时间延迟放回连接池里面,虽然已经关闭,还是输出了几次正在使用的为1
输出结果
*********************
已经创建的数据库连接5
已创建未使用1
正在使用4
*********************
*********************
已经创建的数据库连接5
已创建未使用4
正在使用1
*********************
*********************
已经创建的数据库连接5
已创建未使用4
正在使用1
*********************
*********************
已经创建的数据库连接5
已创建未使用4
正在使用1
*********************
*********************
已经创建的数据库连接5
已创建未使用4
正在使用1
*********************
*********************
已经创建的数据库连接5
已创建未使用4
正在使用1
*********************
*********************
已经创建的数据库连接7
已创建未使用7
正在使用0
*********************
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在你关闭链接的时候,relaseThreadLister(助手线程,管理回收处理connection的线程)专门处理并且回收你所关闭的链接,链接会被放在临时等待处理回收的队列中等待回收,所以当你程序关闭的时候,会有延迟的放回连接池,譬如检查链接的有效性,是否被正确关闭。 设置分区的最小链接和最大链接,没错,但是还有一个閥值,默认是20,bonecp会更具閥值,维持数据库链接的数量的所以得出是7,也就隐忍而解了
大哥 同感 我也有疑惑哦