美文网首页
java数据库连接池使用

java数据库连接池使用

作者: pr0metheus | 来源:发表于2018-03-21 20:20 被阅读0次

使用的是org.apache.commons.dbcp.BasicDataSource类,该类需要配置一些属性DriverClassName、Url、Username、Password、initialSize、maxActive配置好后就可以使用该类的方法getConnection来获得连接了,因为连接池对象只要一个就可以了,传统的做法会生成多个DBConnectionFactory对象(即DBConnectionFactory对象非单例)而在该对象内部构造器中又会为属性DataSource配置一个BasicDataSource对象,这样就造成多个连接池对象的出现了,造成资源浪费了。即一个DBConnectionFactory的出现配备一个数据库连接池,我们又只需要一个连接池对象就可以了,那么就将DBConnectionFactory设置为单例吧,这样就只会有一个连接池对象了。

代码如下:

package com.shengsiyuan.imis.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

import com.shengsiyuan.imis.exception.ConnectionException;
import com.shengsiyuan.imis.exception.ErrorCode;

/**
 * 取数据库连接的类,单例
 * <p>Title: DBConnectionFactory</p>
 * <p>Description: </p>
 * <p>Company: 自由职业</p> 
 * @author lsw
 * @date 2018年2月2日
 */
public class DBConnectionFactory {
    
    private DataSource dataSource;
    
    public static DBConnectionFactory getInstance = new DBConnectionFactory();
    
    private DBConnectionFactory() {
        buildConnectionPool();
    }
    
    public void buildConnectionPool() {
        BasicDataSource db = new BasicDataSource();
        Properties prop;
        try {
            prop = ConfigHelper.getProperties(FileNameString.CONFIG_FILE_NAME);
            db.setDriverClassName(prop.getProperty(DBString.JDBC_DRIVER));
            db.setUrl(prop.getProperty(DBString.JDBC_URL));
            db.setUsername(prop.getProperty(DBString.JDBC_USERNAME));
            db.setPassword(prop.getProperty(DBString.JDBC_PASSWORD));
            int initialSize = Integer.parseInt(prop.getProperty(DBString.JDBC_MIN_CONNECTIONS));
            int maxActive = Integer.parseInt(prop.getProperty(DBString.JDBC_MAX_CONNECTIONS));
            db.setInitialSize(initialSize);
            db.setMaxActive(maxActive);
            dataSource = db;
            System.out.println(dataSource);
        } catch (IOException e) {
            e.printStackTrace();
            throw new ConnectionException(MessageHelper.getExceptionInfo(ErrorCode.DB_CONNECTION_ERROR));
        }
       
    }
    
    public Connection getConnection() {
        try {
            Connection connection = dataSource.getConnection();
            return connection;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new ConnectionException(MessageHelper.getExceptionInfo(ErrorCode.DB_CONNECTION_ERROR));
        }
    }
    
}

相关文章

网友评论

      本文标题:java数据库连接池使用

      本文链接:https://www.haomeiwen.com/subject/xojnqftx.html