数据库连接池(提高对数据库操作的性能)
(数据库连接是一种关键有限昂贵的资源其管理影响到整个系统的性能)
自定义数据库连接池
需要实现javax.sql.DataSource 接口 Java官方提供的数据库连接池规范
要想完成数据库连接池技术 就必须四线DataSoure接口
核心功能
Connection getConnection();获取数据库连接对象
自定义数据库连接池
1、准备容器,用于保存读个连接对象 将ArrayList集合变成一个线程安全的集合对象
private static List pool =Collections.synchronizedList(new ArrayList<>())
2、定义静态代码块,通过工具类获取10个连接对象
循环向集合添加连接对象
3、重写getConnection() ,用于获取一个连接对象
4、定义getSize方法 获取线程池容器的大小
5、归还连接方式
1:继承方式(重写close方法)是一种思想并不能实现
通过connection.getClass()获取连接对象
发现DriverMannager获取的连接实现类是 JDBC4Connection
此时我们可以自定义一个类继承JDBC4Connection重写close()方法
完成连接池对象归还
2:装饰设计模式(包装设计模式)思想
自定义一个“抽象类”实现Connection接口这样就具备了和 JDBC4Connection 相同的行为了
重写close()方法完成连接归还其余的功能还调用mysql驱动包实现类原有的方法即可
3: 适配器设计模式
创建一个适配器类实现Connection接口 将所有方法进行实现除了close方法
自定义连接类只需要继承这个适配器类重写需要改进的close()方法即可
4:动态代理模式
动态代理模式
在不改变目标对象的情况下对方法进行增强
组成:被代理对象(真实的对象) 及 代理对象(内存中的一个对象)
代理对象和被代理对象实现相同的接口
Proxy.newProxyInstance(stu.getClass.getClassLoader,
new Class[]{StudentInterface.class},new InvocationHander(){
})
有三个参数
1、类加载器:和被代理对象使用相同的类加载器
2、接口类型Class数组:和被代理对象使用相同接口
3、代理规则:完成代理增强的功能
CombPooledDataSource();c3p0所用的连接池对象 会自动读取配置文件
druid连接池 不会自动加载配置文件 需要手动加载文件
通过Properties集合加载配置文件
获取配置文件流对象
InputStream is =Object.class.getClassLoader().getResourceAsStream(“配置文件名.properties”)
Properties ptop=new Properties()
ptop.load(is)
Druid连接池对象为 DataSource dataSource =DruidDataSourceFactory.crateDataSource(ptop)
自己封装DruidUtils