单例模式实现DBCP数据库连接池,并从ini文件中读取数据库连接池配置参数

public class DBUtilOfDBCP {

    private static DBUtilOfDBCP instance = null;
    private BasicDataSource dataSource =null;// 数据源
    private DBUtilOfDBCP(String filePath) throws IOException{
        String dataType = null;  //数据库类型1 Oracle 2 SqlServer 3 MySql
        String dataname = null;  //数据库名
        String URL = null;       //数据库URL
        String port = null;      //端口号
        String username = null;
        String password = null;
        String DBUrl = null;
        String driverClassName = null;
        
        INI.load(filePath);//读取数据库配置文件(ini文件)
        
        dataType = (String) INI.getValue("dataSource", "DataType");
        URL = (String) INI.getValue("dataSource", "URL");
        port = (String) INI.getValue("dataSource", "PORT");
        username = (String) INI.getValue("dataSource", "UserName");
        password = (String) INI.getValue("dataSource", "PassWord");
        dataname = (String) INI.getValue("dataSource", "DataName");
        
        if("1".equalsIgnoreCase(dataType)){
            driverClassName = "oracle.jdbc.driver.OracleDriver";
            DBUrl="jdbc:oracle:thin:@"+URL+":"+port+":"+dataname;
        }else if("2".equalsIgnoreCase(dataType)){
            driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
            DBUrl="jdbc:sqlserver://"+URL+":"+"; DatabaseName="+dataname;
        }else if("3".equalsIgnoreCase(dataType)){
            driverClassName = "com.mysql.jdbc.Driver";
            DBUrl="jdbc:mysql://"+URL+":"+port+"/"+dataname;
        }
        dataSource = new BasicDataSource();
        dataSource.setUrl(DBUrl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClassName); // 连接池设置
        dataSource.setInitialSize(20);// 初始连接数
        dataSource.setMaxActive(100);// 最大获取连接数
        dataSource.setMaxIdle(30);// 最大可用空闲连接数
        dataSource.setMinIdle(10);// 最小可用空闲连接数
    }
    public synchronized static DBUtilOfDBCP getInstance(String filePath) throws IOException{
        if(instance == null){
            instance = new DBUtilOfDBCP(filePath);
        }
        return instance;
    }
    public Connection getConnection() throws SQLException{
        Connection conn = null;
        if(dataSource != null){
            conn = dataSource.getConnection();
        }
        return conn;
    }
    public static void main(String[] args) throws IOException, SQLException {
        // TODO Auto-generated method stub
        Long begin = System.currentTimeMillis();
        String filePath = "D:/workspace/myreport/WebRoot/WEB-INF/dataSource.ini";
        Connection conn = null;
        DBUtilOfDBCP dBUtilOfDBCP = DBUtilOfDBCP.getInstance(filePath);
        for(int i = 0 ;i<10000;i++){
            conn = dBUtilOfDBCP.getConnection();
            if(conn != null){
                conn.close();
            }
        }
        Long end = System.currentTimeMillis();
        System.out.println("连接数据库所需要的时 间:"+(end-begin));
        //连接数据库所需要的时 间:750
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值