对于ORM框架而言,数据源的组织非常重要,直接影响到框架的性能。
数据源与连接池 |
任务:分析MyBatis框架的数据源结构,解析MyBatis的连接池。
##首先,MyBatis的数据源的分类
##然后,数据源是如何加载和使用
##最后,分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织。 [ 重点POOLED类型的数据源和其实现的连接池原理 ]
目录
- 一MyBatis数据源DataSource分类
- 二DataSource数据源的创建过程
- 三DataSource数据源的创建Connection
- 四UnpooledDataSource无连接池数据源
- 五连接池的使用原因?场景?
- 六PooledDataSource 连接池数据源
|
https://blog.csdn.net/luanlouis/article/details/37671851?
一、MyBatis数据源DataSource分类 |
四个包: # org.apache.ibatis.datasoruce # org.apache.ibatis.datasoruce.jndi JNDI实现数据源 JNDI # org.apache.ibatis.datasoruce.pooled 连接池数据源 POOLED # org.apache.ibatis.datasoruce.unpooled 无连接池数据源 UNPOOLED 三种数据源: UNPOOLED、POOLED、JNDI
①MyBatis内部分别定义,实现了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource类
来表示UNPOOLED、POOLED类型的数据源
接口 : DataSource
实现类:UnPooledDataSource
PooledDataSource 引用UnPooledDataSource、提供缓存连接池机制、通过UnPooledDataSource创建Connection
②JNDI类型的数据源DataSource,则是通过JNDI上下文中取值
|
二、数据源DataSource的创建过程 |
MyBatis数据源DataSource对象的创建发生在MyBatis初始化的过程中。 第一步, 第二步, 第三步, |
三、 |
|
四、无连接池数据源UnpooledDataSource |
|
五、 |
|
六、连接池数据源PooledDataSource |
|
七、JNDI类型的数据源DataSource |
MyBatis定义了一个JndiDataSourceFactory工厂来创建通过JNDI形式生成的DataSource。 |
源码分析: 七、JNDI类型的数据源DataSource if (properties.containsKey(INITIAL_CONTEXT)
&& properties.containsKey(DATA_SOURCE))
{
//从JNDI上下文中找到DataSource并返回
Context ctx = (Context) initCtx.lookup(properties.getProperty(INITIAL_CONTEXT));
dataSource = (DataSource) ctx.lookup(properties.getProperty(DATA_SOURCE));
}
else if (properties.containsKey(DATA_SOURCE))
{
// //从JNDI上下文中找到DataSource并返回
dataSource = (DataSource) initCtx.lookup(properties.getProperty(DATA_SOURCE));
}
|
高级问题:框架的性能问题??