连接池:本质是一个存储连接的容器,减少我们连接服务器的时间。容器本质就是一个集合。但该集合必须是一个安全线程。不能两个线程拿到同一个连接。同时该容器还必须实现队列的特性,比如先进先出
mybatis中的连接池:
三种配置方法
主配置文件SqlConfig.xml中的dataSource标签
type的取值是:
POOLED采用传统的连接池(其实是有两个池。空闲和活动池),mybatis中有针对的实现。当需要连接时会取一个空闲的一个连接,如果 当前连接的数量大于活动的数量就会查看当前连接池中的达到最大的没有,如果没有就创建一个,如果也不行就会拿出一个最老的连接也就是活动池中最先进来的。
UNPOOLED 也是采用了传统的DataSource,但没有采用池的概念,所以没有容器的概念
JNDI 采用服务器提供的JNDI来实现,来获取不同数据库的DataSource 注意:如果不是web或者maven的war工程是不能使用的。比如使用tomcat服务器,连接池就是dbcp连接池
连接池执行事务的本质是 class JdbcTransaction
public void commit() throws SQLException {
if (this.connection != null && !this.connection.getAutoCommit()) {
if (log.isDebugEnabled()) {
log.debug("Committing JDBC Connection [" + this.connection + "]");
}
this.connection.commit();
}
}
public void rollback() throws SQLException {
if (this.connection != null && !this.connection.getAutoCommit()) {
if (log.isDebugEnabled()) {
log.debug("Rolling back JDBC Connection [" + this.connection + "]");
}
this.connection.rollback();
}
}
网友评论