DataSource数据源
所有的数据源组件都实现了javax.sql.DataSource接口,Mybatis实现了两个接口实现,分别为PooledDataSource和UnpooledDataSource,使用不同的DataSourceFactory接口实现创建不同类型的DataSource
UnpooledDataSource
每次通过UnpooledDataSource.getConnection()方法获取数据库连接时都会创建一个新连接。
UnpooledDataSource加载时首先会通过以下代码将已经在DriverManger中注册的JDBC驱动复制一份存到registeredDrivers中
static {
Enumeration drivers = DriverManager.getDrivers();
while(drivers.hasMoreElements()) {
Driver driver = (Driver)drivers.nextElement();
registeredDrivers.put(driver.getClass().getName(), driver);
}
}
使用getConnection()方法以及所有重载时都会调用doGetConnection()方法
private Connection doGetConnection(Properties properties) throws SQLException {
// 初始化数据库驱动
this.initializeDriver();
Connection connection = DriverManager.getConnection(this.url, properties);
// 配置数据库连接的autoCommit和隔离级别
this.configureConnection(connection);
return connection;
}
initializeDriver()负责数据库驱动的初始化,创建指定的Driver驱动对象,并将其注册到DriverManager中以及registeredDrivers中。
private synchronized void initializeDriver() throws SQLException {
// 驱动是否已经注册
if (!registeredDrivers.