druid 连接池判断是否还有可用连接

原创
2021/12/15 16:08
阅读数 2.5K

接到这么个需求,数据库走的全是流式查询,导致查询之前要先判断是否有链接可用,否则就不应该将查询放过去。

用的是多数据源,但连接池还是用的 druid,判断方法,逻辑代码如下。

 DynamicRoutingDataSource dynamicRoutingDataSource = (DynamicRoutingDataSource) dataSource;
 DataSource master = dynamicRoutingDataSource.getDataSource("master");
 ItemDataSource master1 = (ItemDataSource) master;
 DruidDataSource dataSource = (DruidDataSource) master1.getDataSource();
 //  当前连接池连接数(数据连接池中连接数)
 int poolingCount = dataSource.getPoolingCount();
 // 连接池连接数峰值(数据连接池中连接数的最大值)
 int poolingPeak = dataSource.getPoolingPeak();
 // 活动的,在使用的连接数, 当前活跃连接数(数据连接池中活跃连接数)
 int activeCount = dataSource.getActiveCount();
 // 活跃数峰值出现时间
 Date activePeakTime = dataSource.getActivePeakTime();
 // 活跃数峰值(连接池的最大连接数)
 int activePeak = dataSource.getActivePeak();
 
 // 已建立的连接数
 long connectCount = dataSource.getConnectCount();
 
 
 long closeCount = dataSource.getCloseCount();
 int maxActive = dataSource.getMaxActive();
 
 System.out.println("poolingCount:" + poolingCount + " activeCount:" + activeCount + " connectCount:" + connectCount);

 

测试,首先没有任务操作的时候先进行测试。

 poolingCount:5 activeCount:0 connectCount:0

开启一个查询,流式查询过程中进行再次测试。

 poolingCount:4 activeCount:1 connectCount:52 activePeak:29 closeCount:33 maxActive:50

开启N个查询,最终可以确定,

 if (activeCount + poolingCount >= maxActive) {
     System.out.println("已经超过连接数量,不能再加入任务了");
 }

通过这个来控制连接数量。另外加上 GetConnectionTimeoutException 来控制基本没问题了。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部