登录DBCP

kac*_*nov 13 java logging apache-commons-dbcp

我正在使用Apache Commons DBCP.有一项任务是跟踪DBCP的内部行为 - 活动和空闲连接的数量.

我发现DBCP根本没有任何这样的日志记录.是的,当从池中借用连接时,可以编写输出BasicDataSource状态的代码.但是,在返回或关闭连接时,无法跟踪BasicDataSource的状态,因为连接对象对池没有任何了解.

有任何想法吗?

The*_*ist 7

我认为方面可能是你的quandry的解决方案.查看:

基本上,您可以编写一个或两个方面来"锁定"DBCP内部某些方法的执行.

就像是:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;

@Aspect
public class AroundExample {

  @Around("org.apache.commons.dbcp.PoolingDataSource.getConnection()")
  public Object doBasicPStuff(ProceedingJoinPoint pjp) throws Throwable {
    // write code to do what you want
    final PoolingDataSource ds = (PoolingDataSource) pjp.getThis();
    // log whatever you want

    // let it finish
    Object retVal = pjp.proceed();
    // stop stopwatch
    return retVal;
  }

}
Run Code Online (Sandbox Code Playgroud)

这只是一个很小的例子.方面非常强大,有很多不同的方法可以做你想要的.代码取决于您是否使用Spring,以及您想要记录的内容.

PS我还没有测试过上面的代码.