本架构依据JDBC数据库连接的基本特性,封装了一套数据库连接池API
本架构对数据库相关的功能完全基于这一套连接池API
本架构希望对数据库连接池模式作一定的设计,这样或许整个数据库API会变的更简单实用
连接池API使用者可以自己实现也可以使用框架已经实现好的简单连接池
如果需要实现数据库连接池API可以实现org.jtry.framework.database.base.DBConnectionPool接口
public interface DBConnectionPool {
Connection getConnection();
DataSource getDataSource();
boolean returnConnection(Connection conn);
void refreshConnectionPool();
void closeConnectionPool();
}
实现的例子如下
public class C3P0DBConnectionPool implements DBConnectionPool {
private final Logger logger = LoggerFactory.getLogger(C3P0DBConnectionPool.
class);
private ComboPooledDataSource dataSource;
public C3P0DBConnectionPool(DBConnectionInfo dbInfo) {
try {
dataSource = new ComboPooledDataSource();
dataSource.setUser(dbInfo.getDbUsername());
dataSource.setPassword(dbInfo.getDbPassword());
dataSource.setJdbcUrl(dbInfo.getDbConnectionString());
dataSource.setDriverClass(dbInfo.getDriveClass());
dataSource.setInitialPoolSize(dbInfo.getMinConnectionNum());
dataSource.setMinPoolSize(dbInfo.getMinConnectionNum());
dataSource.setMaxPoolSize(dbInfo.getMaxConnectionNum());
} catch (Exception e) {
logger.error("connectionPoolInit error ", e);
}
}
@Override
public Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
logger.error("getConnection error ", e);
}
return conn;
}
@Override
public DataSource getDataSource() {
return dataSource;
}
@Override
public boolean returnConnection(Connection conn) {
try {
conn.close();
return true;
} catch (SQLException e) {
logger.error("returnConnection error ", e);
return false;
}
}
@Override
public void refreshConnectionPool() {
}
@Override
public void closeConnectionPool() {
dataSource.close();
}
}
如果想把已经实现好的数据库连接池配置为框架默认使用的连接池请使用配置工具
打开 框架配置-系统配置-组件配置
在其中添加一个数据库连接池组件并设置为当前使用。
本架构自身带有两个简单的连接池分别为
org.jtry.framework.database.base.SimpleKeepDBConnectionPool 使用Map结构作为容器恒定数量的连接池
org.jtry.framework.database.base.SimpleRealDBConnectionPool 使用Queue结构作为容器保持数量但会根据开销随时创建销毁的连接池
如果不进行连接池配置那么框架默认使用的是org.jtry.framework.database.base.SimpleKeepDBConnectionPool连接池