很多时候我们使用连接池,仅仅是配置一个初始连接数、最小连接数、最大连接数,然后就不管它了,我们没有想到要去看看现在连接池里面维护的连接数有多少,还有多少连接可用。当我们要定位问题的时候,或者进行业务量分析的时候,就需要知道每时每刻连接池的数据量。那OracleDataSource里面的当前可用的连接数怎么获取呢?
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import oracle.jdbc.pool.OracleConnectionCacheManager;
import oracle.jdbc.pool.OracleDataSource;
public class TestJdbc {
public
static void main(String[] args) {
java.util.Properties prop = new java.util.Properties();
prop.setProperty("ConnectionWaitTimeout", "1");
prop.setProperty("InactivityTimeout", "20");
prop.setProperty("MaxStatementsLimit", "90");
prop.setProperty("MinLimit", "2");
prop.setProperty("MaxLimit", "10");
prop.setProperty("InitialLimit", "5");
prop.setProperty("PropertyCheckInterval", "30");
OracleDataSource ods;
try {
ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@//10.45.4.194:1521/PCC");
ods.setUser("ccv611");
ods.setPassword("smart");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties(prop);
ods.setConnectionCacheName("OralceConnectionCache");
OracleConnectionCacheManager cacheManager =
OracleConnectionCacheManager.getConnectionCacheManagerInstance();
List list = new ArrayList();
list.add(ods.getConnection());
System.out.println(cacheManager.getNumberOfActiveConnections("OralceConnectionCache"));
System.out.println(cacheManager.getNumberOfAvailableConnections("OralceConnectionCache"));
for (int i = 0; i < 6; i++) {
list.add(ods.getConnection());
System.out.println("get connection success = " +
list.size());
}
System.out.println(cacheManager.getNumberOfActiveConnections("OralceConnectionCache"));
System.out.println(cacheManager.getNumberOfAvailableConnections("OralceConnectionCache"));
for (int i = 0; i < list.size(); i++) {