• 欢迎来到本博客,希望可以y一起学习与分享

自定义连接池

Java benz 3年前 (2018-02-03) 124次浏览 0个评论 扫描二维码
文章目录[隐藏]

传统JDBC的操作,对连接的对象销毁不是特别好。每次创建和销毁连接都是需要花费时间。可以使用连接池优化的程序。

在程序开始的时候,可以创建几个连接,将连接放入到连接池中,用户使用连接的时候,可以从连接池中进行获取。用完之后,可以将连接归还连接池。

Java为数据库连接池提供了公共的接口:javax.sql.DataSource。
根据我们对连接池简单的理解,如果我们要自定义连接池,需要完成以下步骤:

  1. 创建连接池实现(数据库),并实现接口javax.sql.DataSource.。因为我们只使用该接口中的getConnectoin()方法,简化本案例,我们将自己提供方法,而没有实现接口。
  2. 提供一个集合,用于存放连接,因为添加/移除频繁,所以选择LinkedList。
  3. 本案例在静态代码块中,为连接池初始化5个连接。
  4. 之后,如果程序需要连接,调用实现类的getConnection(),本方法将从连接池(容器List)获得连接。为了保证当前连接只能提供给一个线程使用,所以我们需要将连接先从连接池中移除。
  5. 当用户使用完连接,释放连接时,不执行close()方法,而是把连接归还到连接池中去。

实现示例代码 MyDataSource.java 如下:

测试代码调用 TestMyDataSource.java:

二、装饰者设计模式–修改close()方法

装饰者设计模式

点击这里查看装饰者设计模式
装饰者固定结构:接口A,已知实现类C,需要装饰者创建代理类B

  1. 创建类B,并实现接口A
  2. 提供类B的构造方法,参数类型为A,用于接收A接口的其他实现类(C)
  3. 给类B添加类型为A成员变量,用于存放A接口的其他实现类
  4. 增强需要的方法
  5. 实现不需要增强的方法,方法体重新调用成员变量存放的其他实现类对应的方法

在这里,我们的目标是修改JDBCUtils.java里的方法release()中的conn.close(),这里JDBCUtils是被修饰类(C)。
因为close()属于Connection接口(A),所以,我们创建一个装饰者类MyConnection(B),并实现同样的接口。
在装饰类 MyConnection中,需要提供类MyConnection的构造方法,用于接收需要修改方法的必要参数,然后再去修改需要增强的方法。

装饰类 MyConnection.java

使用装饰类

测试类


文章 自定义连接池 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!