连接池解决现状问题的原理
目的:1为什么需要连接池. 2连接池的执行原理
JDBC访问数据库的每个增删改查的操作都需要先创建连接,而且这个连接对象是不能共享的。每个用户每次访问都必须创建一个连接对象,并且这个连接对象应该设置成局部变量。(Connection对象)
连接对象的使用问题:
1.每次访问数据库最耗时的部分就是创建连接对象
2.每次使用完链接对象后.就马上关闭.
连接池的目的: 为了解决如何提高创建连接对象的速度和如何提高连接对象的使用率这两个问题.
未使用连接池:每个用户访问数据库的时候都是自己创建连接对象.
**使用了连接池:**系统开始启动的时候就创建了一定数量的了连接对象,使用的时候从连接池中取出就可以了.不需要自己来创建连接对象.
Connection连接对象三个时段的操作特点:
1.创建时:连接对象不再由自己创建,而是系统启动的时候已经创建一定数量的连接,并放在连接池中.
2.使用时:直接从连接池中获取一个创建好的连接对象.
3.关闭时:不是真的关闭连接对象,而是将连接对象再放回到连接池,供下一个用户使用.
数据库连接池API
目的:1.连接池的接口名. 2.从连接池中得到连接的方法.
数据源接口: (javax.sql.DayaSource接口)
实现类有第三方厂商来实现,只要实现这个接口都可以编写自己的连接池.
数据源接口中的方法:(DataSource接口)
Connection getConnection() 从连接池中获取连接对象.
常用连接池参数的含义: 每个连接池都有很多的参数,几乎所有的参数都有默认值的,我们可以根据实际的情况进行调整.参数名在不同的连接池中有区别.
1.初始连接数:服务器启动的时候创建的连接对象的数量.2.最大连接数:连接池中最多可以允许放多少个连接对象.3.最长等待时间:如果连接池中没有连接对象,设置用户等待的最长时间是多久,单位是毫秒.如果超出这个时间则抛出异常.4.最长空闲回收时间:如果一个连接对象长时间没有人使用,设置多久回收这个对象,默认值为不回收.
常用的连接池介绍
DataSource是Oracle公司提供的一个接口,没有具体的实现,他的实现由连接池的数据厂商去实现.
常用的连接池组件:
1.阿里巴巴-德鲁伊druid连接池
2.DBCP(DataBase Connection Pool)是Apache上的一个JAVA连接池,也是Tomcat使用的连接池组件.
3.C3P0开源的连接池,目前使用他的开源项目有Hibernate,Spring等。它有自动回收空闲连接的功能.
C3P0连接池
目的:1.认识C3P0连接池 2.C3P0连接池的配置文件和类.
常用的设置属性 就算不设置任何参数,每个连接池都有默认的设置参数.不同的数据源实现厂商,属性名不同.
1.initialPoolSize:初始连接数
2.maxPoolSize:最大连接数
3.checkoutTimeout:最长等待时间
4.maxIdleTime:最长空闲回收时间,并不是到了这个时间马上回收,而是看连接池的使用情况
配置文件要求:
1.文件名:必须叫 c3p0-config.xml
2.路径:这个文件必须放在src目录下,即类路径下.
3.分成两种配置:
1.默认配置:在不指定配置名的情况下,默认使用的配置
2.命名配置:可以使用多个配置,通过名字来选择使用的配置
3.多个配置的好处:
1.可以使用不同的连接池参数
2.可以指定不同的数据库名 如:Day21,Day22
3.可以指定不同厂商的数据库 如:Oracle,MySQL
API介绍: (C3P0中的类)
1.ComboPooledDataSource()默认的构造方法,是用默认的配置来创建连接池
2.ComboPooledDataSource(命名配置)指定使用哪个命名配置来创建连接池.
public class Demo01C3p0 {
public static void main(String[] args) throws SQLException {
//1.创建连接池,使用默认配置
ComboPooledDataSource ds = new ComboPooledDataSource("otherc3p0");
//2.使用连接池,从中获取10个连接对象
for (int i = 1; i <=11 ; i++) {
Connection connection = ds.getConnection();
System.out.println("第" + i + "个连接对象:" + connection);
//第5个释放
if(i==5){
connection.close();
}
}
}
}
Druid连接池
目的:Druid创建连接池,并从连接池中得到连接对象
简介:Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。
Druid的下载地址:https://github.com/alibaba/druid
DRUID连接池使用的jar包:druid-1.0.9.jar
配置参数:
1.url 连接字符串
2.username:用户名
3.password:密码
4.driverClassName:驱动类名,会自动根据url识别,可以不配置
5.initialSize:初始连接数
6.maxActive:最大连接数
7.maxWait:最长等待时间
API
(Class类中的方法)InputStream getResourceAsStream (String path)加载类路径下配置文件,转成一个输入流对象
(Properties类的方法)load(InputStream inStream)读取文件中所有的键和值,加载到集合中
通过druid工厂类的静态方法创建连接池,提供属性集合做为参数
(More ActionsDruidDataSourceFactory的方法)public static DataSource createDataSource(Properties properties)通过属性集合中属性,创建一个连接池
public class Demo02Druid {
public static void main(String[] args) throws Exception {
//从类路径下加载配置文件,获取一个输入流
InputStream inputStream = Demo02Druid.class.getResourceAsStream("/druid.properties");
//2.使用Properties对象的方法将配置文件中属性加载到Properties对象中
Properties properties = new Properties();
//加载了配置文件中所有的属性
properties.load(inputStream);
//3.通过druid的工厂类创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获取10个连接对象
for (int i = 1; i <= 11; i++) {
Connection connection = dataSource.getConnection();
System.out.println("第" + i + "个连接对象:" + connection);
//第3个连接关闭
if (i==3) {
connection.close();
}
}
}
}