druid源码解读--为监控而生,具体监控如何做

本文深入探讨了Druid数据源的StatFilter源码,分析了连接建立、关闭、提交等过程中的监控参数处理。通过学习,强调了Druid作为监控工具的设计理念,并分享了如何在日常开发中应用设计模式提升代码质量。文章预告将对Visitor进行详细讲解,以揭示SQL解析的原理。
摘要由CSDN通过智能技术生成

druid --为监控而生,具体监控如何做

结合昨天FilterChainImpl执行的FilterEventAdapter的拦截器处理逻辑,今天针对源码中的StatFilter源码进行分析,关注拦截sql执行中的监控参数处理。

connection_connect

连接时的拦截方法

public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException {
   
  //连接代理类
    ConnectionProxy connection = null;

    long startNano = System.nanoTime();
    long startTime = System.currentTimeMillis();

    long nanoSpan;
    long nowTime = System.currentTimeMillis();
		//数据源统计
    JdbcDataSourceStat dataSourceStat = chain.getDataSource().getDataSourceStat();
  //连接之前 connectingCount 数量++ 连接的最大数量 连接的最近时间
    dataSourceStat.getConnectionStat().beforeConnect();
    try {
   
      //执行连接 使用ConnectionProxyImpl连接代理类获取连接
        connection = chain.connection_connect(info);
        nanoSpan = System.nanoTime() - startNano;
    } catch (SQLException ex) {
   
      //连接异常记录
        dataSourceStat.getConnectionStat().connectError(ex);
        throw ex;
    }
//创建连接之后 激活的count++ 
  dataSourceStat.getConnectionStat().afterConnected(nanoSpan);

    if (connection != null) {
   
      //获取连接的详情
        JdbcConnectionStat.Entry statEntry = getConnectionInfo(connection);

        //数据源连接监控增加该连接
      dataSourceStat.getConnections().put(connection.getId(), statEntry);

        statEntry.setConnectTime(new Date(startTime));
        statEntry.setConnectTimespanNano(nanoSpan);
        statEntry.setEstablishNano(System.nanoTime());
        statEntry.setEstablishTime(nowTime);
        statEntry.setConnectStackTrace(new Exception());

//设置激活数量        
      dataSourceStat.getConnectionStat().setActiveCount(dataSourceStat.getConnections().size());
    }

    return connection;
}

connection_close

连接关闭的拦截方法

@Override
public void connection_close(FilterChain chain, ConnectionProxy connection) throws SQLException {
   
    if (connection.getCloseCount() == 0) {
   
        long nowNano = System.nanoTime();
//数据源统计
      
        JdbcDataSourceStat dataSourceStat = chain.getDataSource().getDataSourceStat();
//closeCount数量修改
      dataSourceStat.getConnectionStat().incrementConnectionCloseCount();
 //获取连接的详情
      
        JdbcConnectionStat.Entry connectionInfo = getConnectionInfo(connection);

        long aliveNanoSpan = nowNano - connectionInfo.getEstablishNano();
 //监控池移除改连接
      
        JdbcConnectionStat.Entry existsConnection = dataSourceStat.getConnections()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值