java数据库连接池使用

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

/**
 * 取数据库连接的类,单例
 * 

Title: DBConnectionFactory

*

Description:

*

Company: 自由职业

* @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数据库连接池使用)