- 论坛徽章:
- 0
|
自己还没完全理解,第一次用,但是代码可以用了,放上来,要不到时又不知丢那去,找不着了。代码中用的数据库连接,根据不同的数据库,应该把不同的驱动加到工程里,这里用的是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;
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17899/showart_178190.html |
|