自定义连接池、DBCP、C3P0、DRUID
写在前面
百度百科关于数据库连接池的介绍 数据库连接池主要解决的就是连接性能的问题,因为频繁地建立和关闭连接是一件相当耗费性能的事情,尤其是在访问量比较大的时候,所以如何合理分配、管理数据库连接就变得尤为重要,下面列举了四种数据库连接池技术,包括自定义连接池、使用C3P0、DBCP、DRUID创建数据库连接池。
自定义连接池
创建自定义连接池的方法也很简单,只需要将连接放到集合(容器)中,当用户需要连接数据库时,不是直接创建连接而是获取连接池中已经创建好连接,这在一定程度上可以提高性能。当然,在实际的项目中通常不会使用自定义的连接池,这里仅仅作为演示。首先要创建一个properties文件,设置连接参数,包括驱动(driver)、数据库连接地址(url)、用户名(username)、密码(password),例如:
1 | driver=com.mysql.cj.jdbc.Driver |
最新版本的MySQL驱动,其注册地址是com.mysql.cj.jdbc.Driver
而不是com.mysql.jdbc.Driver
,并且必须要设置useSSL和serverTimezone两个参数,否则会报错(警告)
1 | package com.jdbc.utils; |
1 | package com.jdbc.datasource; |
上面的代码在创建连接池的时候,没有直接将连接添加到连接池中,而是通过一个装饰类MyConnection
包装后再添加到连接池中,这样做的主要原因是当用户操作完成后会调用release()
方法释放资源,而release()方法中又调用了close()
,如果每个用户在执行完操作后直接将连接关闭,那么连接池中的连接就会被消耗殆尽,所以理想的情况应该是用户在执行完操作后将连接归还到连接池中,为了实现这一操作,可以定义一个新的类MyConnection
实现Connection接口并重写close()方法。
1 | package com.jdbc.datasource; |
下面是测试代码:
1 | package com.jdbc.utils.test; |
通过上面的代码可以发现,在创建自定义数据库连接池的时候,核心的代码并不多,但是有相当多的方法需要重写,而这些方法大部分暂时还用不到,所以在实际中并不会这么做,为了更高效地创建连接池,通常会使用下面的三种方式。
C3P0
C3P0官网,要使用C3P0创建数据库连接池,需要用到相关的jar
包以及配置xml
文件,jar包下载地址,关于xml
文件的配置官网上的文档有相关的说明,文档地址,下面是我的配置的一个简单的xml文件,内容如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
上面的xml文件包括一个默认的配置和一个自定义的配置,创建连接池的代码如下:
1 | package com.jdbc.utils.test; |
可以发现,使用C3P0创建连接池相比于使用原生的方法创建连接池要方便得多。
DBCP
DBCP相比于C3P0可能稍逊一筹,但功能也很强大,由apache开发,dbcp2 jar
包下载地址,pool2 jar
包下载地址,在使用DBCP前需要先创建properties文件,所以我们可以创建一个工具类来加载资源文件。
1 | package com.jdbc.utils; |
下面是测试代码:
1 | package com.jdbc.utils.test; |
DRUID
druid官网,DRUID是一个开源的分布式数据存储程序。