加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

获取oracle连接池的当前连接数

(2014-12-08 21:56:27)
标签:

oracledatasource

activeconnection

availableconnection

当前连接数

很多时候我们使用连接池,仅仅是配置一个初始连接数、最小连接数、最大连接数,然后就不管它了,我们没有想到要去看看现在连接池里面维护的连接数有多少,还有多少连接可用。当我们要定位问题的时候,或者进行业务量分析的时候,就需要知道每时每刻连接池的数据量。那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++) {
                Connection cc = list.get(i);
                Statement s = cc.createStatement();
                ResultSet rs = s.executeQuery("SELECT sysdate FROM  dual");
                while(rs.next()) {
                    System.out .println(rs.getString(1));
                }
                rs.close();
                s.close();
                cc.close();
                System.out.println(cacheManager.getNumberOfActiveConnections("OralceConnectionCache"));
                System.out.println(cacheManager.getNumberOfAvailableConnections("OralceConnectionCache"));
            }
                    
            System.out.println(cacheManager.getNumberOfAvailableConnections("OralceConnectionCache"));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
       
    }
}

 

说明:

ActiveConnection : 连接池检出的连接数,也即应用程序正在使用的连接数;

AvailableConnection:连接池当前可用的连接数,也即已经从数据库获取了数据库连接放在连接池里面,而现在还没有应用程序来使用。

 

那么连接到oracle的连接数就是:ActiveConnection  + AvailableConnection

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有