概述
但是在实际的开发过程中,“获得资源”和“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况下我们是采用连接池技术。
所谓的连接池技术,其实它是一种用池来管理连接「connection」的思想,我们需要 connection 的时候不用自己创建 ,而是从池中直接获取 connection 对象,用完了再放回去,而且还可以重复使用。
今天我们就在之前「使用 properties 配置文件」的基础上结合连接池技术来操作数据库,关于连接池今天主要介绍自定义连接池以及方法增强!
自定义连接池
一. 自定义连接池「核心代码分析」
可以看到,我们自定义了一个连接池实现了连接池「DataSource」接口,并重写了 DataSource 的全部方法「这里部分已省略」。
我们首先创建了一个 LinkedList 集合作为“池”,与此同时,创建5个 connection 并将它放在了“池”中,这里之所以选择 LinkedList 集合是因为要经常进行“移除”和“添加”操作;接下来重写了获得 connection 的方法 getConnection() 以及定义了一个将connection用完放回“池”中的方法 backConnection(),在我们从“池”里拿 connection 的时候,为了保证当前的 connection 只供给一个线程使用,所以我们采用了 remove()方法从连接池中移除,要归还“池”的时候使用 add()方法添加到 “池”中。
二. 测试
核心代码:
可以看到,我们使用了自定义的连接池来完成了数据库的插入操作,代码很简单,还是那几个步骤,我们来看看运行效果怎么样?
okey,数据已经添加到数据库成功了。
自定义连接池「方法增强」
我们知道,在上面一种方法中,我们通过 getConnection() 方法来获得连接,并通过 backConnection()方法将其放回到连接池,但其实这是美中不足的,如果用户调用了 conn.close()方法,那么连接将会被彻底的释放,“池”中不再有连接。
所以,如果我们想实现即使用户调用了 close 方法,连接也不会被彻底的释放,而是仍然归还给“池”,那么我们就需要对 close 方法进行增强!
一. 自定义 Connection 实现接口并重写 Connection 的所有方法
核心代码
二. 自定义一个连接池接口
这个跟之前的自定义连接池思想是一样的,只是在获得 Connection 的时候用了自定义增强版的 MyConnection,通过以下核心代码就可以获得连接:
三. 测试
核心代码:
看看效果如何:
可以看到,向数据库添加数据完美成功!
总结
以上就是关于自定义连接池以及方法增强的相关应用和介绍,其实我们一直都是在用 JDBC 来操作数据库,只是在这个过程中对操作进行不断的优化和改进,提高性能,方便我们后期的维护。
文:dolphkon
封面图:来源于网络
PS:本公众号内容属于原创,文章通俗易懂,重在思想,好看的皮囊千篇一律,有趣的灵魂万里挑一,如果你喜欢,欢迎关注我的公众号,「ID:androiddevup」在今后的学习过程中,我们一起交流学习,互相提高!
领取专属 10元无门槛券
私享最新 技术干货