数据源包结构
一 概述
数据源相关核心类在datasource中,包含JNDI使用线程池的和不使用线程池的实现
二 核心接口
DataSoourceFactory接口
//设置属性,被XMLConfigBuilder所调用 void setProperties(Properties props); //生产数据源,直接得到javax.sql.DataSource DataSource getDataSource();
DataSource 提供接口三 核心接口的实现Connection getConnection() throws SQLException;Connection getConnection(String username, String password)
1.JNDI实现
JndiDataSourceFactory实现了DataSourceFactory接口。JndiDataSourceFactoryJNDI数据源工厂这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集 中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
提供DataSource实现类的关键代码:
InitialContext initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup(properties.getProperty(INITIAL_CONTEXT));
DataSource dataSource = (DataSource) ctx.lookup(properties.getProperty(DATA_SOURCE));
2. 连接池实现(位于datasource.pooled子包中)
PooledDataSourceFactory继承UnpooledDataSourceFactory,从而实现了DataSourceFactory接口。
关键在于构造方法:
public PooledDataSourceFactory() {
this.dataSource = new PooledDataSource();
}
构造方法中,dataSource使用的是 PooledDataSource。
PooledDataSource实现了DataSource接口,维护了若干个 数据库连接。
3. 非连接池实现(位于datasource.unpooled子包中)
UnpooledDataSourceFactory实现了DataSourceFactory接口。
UnpooledDataSource实现了DataSource接口,提供了获取数据库连接Connection的2个方法。
内部维护了 获取一个数据库连接的若干属性,包括但不限于:
String driver;//驱动名
String url;//数据库访问路径
String username;//用户名
String password;//密码
boolean autoCommit;//是否自动提交