关于BoneCP 连接数的一些疑惑

发布于 2021-11-13 06:51:13 字数 3413 浏览 825 评论 2

 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本王不退位尔等都是臣 2021-11-17 18:17:01

在你关闭链接的时候,relaseThreadLister(助手线程,管理回收处理connection的线程)专门处理并且回收你所关闭的链接,链接会被放在临时等待处理回收的队列中等待回收,所以当你程序关闭的时候,会有延迟的放回连接池,譬如检查链接的有效性,是否被正确关闭。 设置分区的最小链接和最大链接,没错,但是还有一个閥值,默认是20,bonecp会更具閥值,维持数据库链接的数量的所以得出是7,也就隐忍而解了

牵你的手,一向走下去 2021-11-17 08:04:07

大哥 同感  我也有疑惑哦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文