我正在使用c3p0的ComboPooledDataSource为我的Web应用程序实现一些运行时报告。我想知道是否有一种方法可以以编程方式获得迄今为止池中连接数最多的连接。具有与ThreadPoolExecutor.getLargestPoolSize()相同的效果。

我可以在ComboPooledDataSource上看到许多报告方法,但是找不到类似的东西。似乎没有任何(有意义的)c3p0 javadocs没有帮助。

最佳答案

我搜寻了API,却找不到任何东西。这是我的简单解决方法:

static final ComboPooledDataSource dataSource = new ComboPooledDataSource();

static volatile int largestPoolSize = 0;

public static Connection getConnection() throws SQLException {
    Connection connection = dataSource.getConnection();
    updateLargestPoolSize();
    return connection;
}

private static void updateLargestPoolSize() throws SQLException {
    int numConnections = dataSource.getNumConnections();
    if (numConnections > largestPoolSize) {
        largestPoolSize = numConnections;
    }
}


如果有人可以提出更复杂的建议,请发布。

09-27 03:02