连接池
来源:互联网 发布:小猪cms微电商系统 编辑:程序博客网 时间:2024/06/05 20:27
- 连接池
- 自定义连接池
- 连接池标准
- 总结
- 开源连接池
- dbcp
- dbcp连接池使用
- c3p0
- c3p0与dbcp区别
- c3p0连接池使用
- dbcp
连接池
就是创建一个容器,用于装入多个Connection对象,在使用连接对象时,从容器中获取一个Connection,使用完成后,在将这个Connection重新装入到容器中。这个容器就是连接池。(DataSource)也叫做数据源.
我们可以通过连接池获取连接对象.
优点:
节省创建连接与释放连接 性能消耗 —- 连接池中连接起到复用的作用 ,提高程序性能
自定义连接池
- 创建一个MyDataSource类,在这个类中创建一个LinkedList
- 在其构造方法中初始化List集合,并向其中装入5个Connection对象。
- 创建一个public Connection getConnection();从List集合中获取一个连接对象返回.
- 创建一个 public void readd(Connection)
这个方法是将使用完成后的Connection对象重新装入到List集合中.
连接池标准
在javax.sql包下定义了一个接口 DataSource
简单说,所有的连接池必须实现javax.sql.DataSource接口,
我们的自定义连接池必须实现DataSource接口。
我们操作时,要使用标准,怎样可以让 con.close()它不是销毁,而是将其重新装入到连接池.
要解决这个问题,其本质就是将Connection中的close()方法的行为改变。
怎样可以改变一个方法的行为(对方法功能进行增强)
- 继承
- 装饰模式
- 装饰类与被装饰类要实现同一个接口或继承同一个父类
- 在装饰类中持有一个被装饰类引用
- 对方法进行功能增强
- 动态代理
可以对行为增强
Proxy.newProxyInstance(ClassLoacer ,Class[],InvocationHandler);
结论:Connection对象如果是从连接池中获取到的,那么它的close方法的行为已经改变了,不在是销毁,而是重新装入到连接池。
总结
- 连接池必须实现javax.sql.DataSource接口。
- 要通过连接池获取连接对象 DataSource接口中有一个 getConnection方法.
- 将Connection重新装入到连接池 使用Connection的close()方法。
开源连接池
dbcp
dbcp是apache的一个开源连接池。
要想使用DBCP连接池,导入两个jar包
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
dbcp连接池使用
- 手动配置(手动编码)
BasicDataSource bds = new BasicDataSource();// 需要设置连接数据库最基本四个条件 bds.setDriverClassName("com.mysql.jdbc.Driver");bds.setUrl("jdbc:mysql:///day18");bds.setUsername("root");bds.setPassword("abc");// 得到一个ConnectionConnection con = bds.getConnection();
- 自动配置(使用配置文件)
Properties props = new Properties(); FileInputStream fis = new FileInputStream("D:\\workspace\\test\\src\\dbcp.properties");props.load(fis);DataSource ds = BasicDataSourceFactory.createDataSource(props);
dbcp.properyies
driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql:///day18username=rootpassword=abc
c3p0
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。
目前使用它的开源项目有Hibernate,Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
c3p0连接池使用
导包:
c3p0-0.9.1.2.jar
使用
- 手动
ComboPooledDataSource cpds = new ComboPooledDataSource(); cpds.setDriverClass("com.mysql.jdbc.Driver");cpds.setJdbcUrl("jdbc:mysql:///day18");cpds.setUser("root");cpds.setPassword("abc");
自动(使用配置文件)
c3p0的配置文件可以是properties也可以是xml.c3p0的配置文件如果名称叫做 c3p0.properties or c3p0-config.xml 并且放置在classpath路径下(对于web应用就是classes目录)
那么c3p0会自动查找。注意:我们其时只需要将配置文件放置在src下就可以。
使用:
ComboPooledDataSource cpds = new ComboPooledDataSource();
它会在指定的目录下查找指定名称的配置文件,并将其中内容加载。
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?><c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///day18</property> <property name="user">root</property> <property name="password">abc</property> </default-config></c3p0-config>
常用基本连接池属性
acquireIncrement 如果连接池中连接都被使用了,一次性增长3个新的连接
initialPoolSize 连接池中初始化连接数量 默认:3
maxPoolSize 最大连接池中连接数量 默认:15连接
maxIdleTime 如果连接长时间没有时间,将被回收 默认:0 连接永不过期
minPoolSize 连接池中最小连接数量 默认:3
- 连接池连接mysql
- 连接池管理连接
- 连接池连接数据库
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- 连接池
- Java多线程volatile和synchronized
- 【LeetCode】55. Jump Game
- 基于centos的Spark环境搭建过程详解
- maven入门--简介
- 练习三 1021
- 连接池
- JAVA009-对象的行为
- Android studio 设置主题字体以及第一次启动虚拟机HAX kernel module is not installed问题
- 网络编程学习小结
- C++ 第十三周 多态性 项目1【项目1-分数类中的运算符重载】
- 线段树学习心得 poj3468
- 第十三章 限制 第十四章 参考
- 机器学习中的数据集合
- Spring+SpringMVC+mybatis入门(环境搭建+crud)