JAVA中使用DBCP做数据库连接池 作者: jabseal 和 java相关 介绍了和java,有关的知识、技巧、经验,和一些java源码等。自己还没完全理解,第一次用,但是代码可以用了,放上来,要不到时又不知丢那去,找不着了。代码中用的数据库连接,根据不同的数据库,应该把不同的驱动加到 工程里,这里用的是postgresql,可以到postgresql官网下载JAVA驱动包,最新的好象是8.1的。import java.sql.Connection; import java.sql.SQLException; import java.sql.DriverManager; import org.apache.log4j.Logger; import org.apache.commons.pool.ObjectPool; import org.apache.commons.pool.impl.GenericObjectPool; import org.apache.commons.dbcp.DriverManagerConnectionFactory; import org.apache.commons.dbcp.ConnectionFactory; import org.apache.commons.dbcp.PoolableConnectionFactory; import org.apache.commons.dbcp.PoolingDriver; /** * ݿ数据库连接缓冲池 */ public class DBPool { private final static Logger logger = Logger.getLogger(DBPool.class); private static String dbIP = "192.168.0.132"; private static String dbJdbc = "jdbc:postgresql://" + dbIP + "/sample"; private static String dbUser = "sample"; private static String dbPwd = "sample"; private static Class driverClass = null; private static ObjectPool connectionPool = null; public DBPool() { } /** * 初始化数据源 */ private static synchronized void initDataSource() { //驱动数据源 if (driverClass == null) { try { driverClass = Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { logger.error(e.getMessage(), e); } } } /** * 连接池启动 * @throws Exception */ public static void StartPool() { // 记录连接源的字符串 logger.info(dbJdbc); // 初始化数据源 initDataSource(); // 如果连接池为空 if (connectionPool != null) { ShutdownPool(); } try { connectionPool = new GenericObjectPool(null); ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( dbJdbc, dbUser, dbPwd); PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory( connectionFactory, connectionPool, null, null, false, true); Class.forName("org.apache.commons.dbcp.PoolingDriver"); PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); driver.registerPool("dbpool", connectionPool); logger.info("Init Pool for Database Connection Succees."); } catch (Exception e) { logger.error(e.getMessage(), e); } } /** * 释放连接池 */ public static void ShutdownPool() { try { PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); driver.closePool("dbpool"); } catch (SQLException e) { logger.error(e.getMessage(), e); } } /** * 打印连接池状态 */ public static String GetPoolStats() { StringBuffer stat = new StringBuffer(); try { PoolingDriver driver = (PoolingDriver) DriverManager .getDriver("jdbc:apache:commons:dbcp:"); ObjectPool connectionPool = driver.getConnectionPool("dbpool"); stat.append("-- Active Connection: "); stat.append(connectionPool.getNumActive()); stat.append(" ,"); stat.append("Free Connection: "); stat.append(connectionPool.getNumIdle()); stat.append(" . --"); } catch (Exception e) { logger.error(e.getMessage(), e); } return stat.toString(); } /** * 取得连接池中的连接 * @return */ public static Connection getDbConnection() { Connection conn = null; if(connectionPool == null) StartPool(); try { conn = DriverManager .getConnection("jdbc:apache:commons:dbcp:dbpool"); } catch (SQLException e) { logger.error(e.getMessage(), e); } return conn; } }