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