使用的是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));
}
}
}