如何使用动态代理,自己写一个数据库连接池

北京哪个医院可彻底治愈白癜风 http://pf.39.net/bdfyy/bdfal/190709/7285550.html

今天是刘小爱自学Java的第68天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

在学线程的时候,学过线程池的概念。

当时举了个地铁临时票的例子,来说明线程池的作用。

其实数据库连接池也是一样的道理。

也就是将数据库连接放到一个池子里面,需要使用时就去取,这样的话,就不用每次都自己获取连接了。

用一张图片来说明:

①普通方式获取连接

用户每访问一次数据库就要获取一次连接,这样就会有几个问题:

连接使用完后就会被销毁,造成资源浪费。如果用户有很多个,要获取很多次连接。频繁的连接数据会造成资源消耗过多,从而使数据库死机。②连接池获取连接

连接池的好处在于:

每次使用完连接后将其放回连接池,资源重复利用,更能提高程序性能。

无论多少个用户,都只需要从连接池中获取就可以了。

一、自定义连接池

事实上关于连接池已经有框架将其封装好了,我们可以直接用。但现在是学习阶段,知其然也要知其所以然。

我们不妨自定义一个连接池,看看具体是如何操作的,并且这样也能更好地去学习连接池框架。

①实现DataSource接口

dataSource是Java中的一个接口,也是Java制定的一个规范,不同的连接池都需要实现这个接口。

MyDataSource是我们自定义的一个连接池,自然也是需要实现该接口。

②创建连接池容器

为什么要用LindkedList?

连接池中的连接被取走,相当于删除了该连接。用户用完连接将其还回连接池,相当于增加了该连接。所以连接池要经常地进行增加和删除。LinkedList集合的底层是链表,特点增删快查询慢,所以选择使用LinkedList。

③初始化连接池

也就是自定义连接池的构造方法,通过参数count可以指定连接池中连接的数量。

④从连接池中获取连接

从连接池中拿走了一个连接,也就相当于将连接池中的该连接删除了。

⑤用完将连接还回来

自定义一个backToPool()方法。

使用完连接后调用该方法将连接还回来。

这也就相当于将该连接添加进连接池中。

自定义连接池写完,做一个测试:

①创建连接池

我们这边给连接池初始化6个连接。

②获取连接

现在只需要从连接池中获取连接就好了。

③预编译以及处理结果

这个昨天刚学习过,不再赘述。

④释放资源

使用昨天封装在工具类JdbcUtil类中的release()方法,其中连接不需要被释放掉,用null代替。

⑤连接还回

连接使用完了之后将其还回到连接池中。

二、优化一之装饰模式

自定义连接池有一个问题,我们定义了一个方法backToPool(),也就是将用完连接将其还回到连接池。

对于我们开发者来说还得自己记住这个方法名,特繁琐。

有没有什么方法直接就能达到其目的?

答案是有的。我们每次使用完连接都要close(),也就是上述中被封装在工具类JdbcUtil类里的release()方法。

将连接的close方法里面的业务逻辑改成将连接还会连接池就好了。我们看看close方法的源码:

①Java中的close方法

Java中有一个接口就是Connection接口,其中就有close方法。这个接口就是Java制定的一个数据库规范。

任何数据库要连接Java就得实现Connection接口。

②MySQL中的close方法

我们使用的数据库是MySQL,MySQL它本身也确实实现了Java中的Connection接口(ConnectionImpl这个类)

也就是MySQL


转载请注明:http://www.aierlanlan.com/tzrz/3883.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了