监控数据源连接池使用情况

背景

上一篇《数据源连接池未关闭的问题 Could not open JDBC Connection for transaction》分析源码了解了MyBatis框架和Spring事务管理自动关闭数据源连接池的功能,解决了一个线上数据源连接池占满的问题。
但解决了一个可能还有下一个,现在需要一个能监控数据源连接池使用情况、快占满了报警的方案。

方案一

这里使用的是Druid数据源,其他数据源可以使用下面的方案二。
Druid数据源本身有一个filter,在获取数据源连接(调用getConnection方法)时会依次调用所有的filter。
于是乎,我们就可以在数据源初始化时增加一个filter,用于查看当前连接池的情况,代码如下:

List<Filter> filters = new ArrayList<Filter>();
filters.add(new FilterAdapter(){
   
	@Override
	public DruidPooledConnection dataSource_getConnection(FilterChain chain, DruidDataSource dataSource, long maxWaitMillis) throws SQLException {
   
		int activeCount = dataSource.getActiveCount();
		if (activeCount > (dataSource.getMaxActive() * 0.8)) {
   
			log.error("Druid Warning,the current active count of Druid Connection Pool is " + activeCount + "!");
		}
		return chain.dataSource_connect(dataSource, maxWaitMillis);
	}
});
dataSource.setProxyFilters(filters);

这里当当前连接数大于最大连接数的80%会打印错误日志,当然也可以再次增加其他各种报警代码。

方案二

方案二可以应用在一般的数据源,不限定Druid数据源。核心思想为,写一个继承数据源子类,重写获取连接的方法,在获取连接前实现监控的代码,示例代码如下:

DruidDataSource dataSource = new DruidDataSource(){
   
	protected Logger log = LoggerFactory.getLogger(BaqiDataSource.class);
	@Override
	public DruidPooledConnection getConnectionDirect(long maxWaitMillis) throws SQLException {
   
		int activeCount = this.getActiveCount();
		if (activeCount > (dataSource.getMaxActive() * 0.8)) {
   
			log.error("Druid Warning,the current active count of Druid Connection Pool is " + activeCount + "!");
		}
		return super.getConnectionDirect(maxWaitMillis);
	}
};
//以下初始化连接池
dataSource.setUrl("xxx");
dataSource.setUsername("xxx");
dataSource.setPassword("xxx"));
dataSource.setDriverClassName("xxx"));
...

结论

方案一适用于Druid数据源,方案二适用于所有的数据源,可以根据情况使用。

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务