vlambda博客
学习文章列表

你了解数据库连接池HiKariCP吗?

     数据库连接池和线程池一样,都属于池化资源对象,作用都是避免重量级资源的频繁创建和销毁。对于数据库连接池来说,就是避免数据库连接频繁创建和销毁,更好的重用连接对象。如图-1所示:

   

图-1

      Java中通过连接池获取连接的一个基本过程,如图-2所示:

      

图-2

    图-2中的DataSource对象,为Java中数据库连接池的公共接口javax.sql.DataSource。Java中所有的连接池对象必须实现此接口(规范),我们的应用程序可以调用此接口对象的getConnection方法获取连接。池中没有连接时,在允许的情况下(连接池一般会设置一个最大连接数)会基于JDBC 驱动(Driver)对象获取与数据库的连接,然后存储到池中,并返回给用户应用。

      目前市面上基于Java中的DataSource规范,实现的连接池有c3p0、DBCP、Tomcat JDBC Connection Pool、Druid、HiKariCP等。不过现阶段市场上对HiKariCP连接池的呼声相对较高,此连接池号称是目前业界性能最好的数据库连接池(江湖一哥的地位毋庸置疑,据说作者在字节码,数据结构和算法层面做了大量优化,这一点可以通过查看源码进行分析)。尤其是在Springboot 2.X版本中,现已将其作为默 认数据库连接池。我们在使用SpringBoot构建项目时,假如添加了数据库驱动,JDBC相关依赖,底层会默认帮我们也添加HikariCP依赖并进行自动初始配置。当我们进行了简单的连接数据库url,用户名和密码配置后,就可以在项目中直接应用HikariCP连接池访问数据库了。如图-3展示了HikariCP连接池在SpringBoot项目应用的一个基本架构:

图-2

      图-3中,我们的应用程序测试类(DataSourceTests),耦合DataSource这个接口,然后通过Spring框架注入一个HikariDataSource对象,并基于此对象获取连接。程序中耦合DataSource接口的好处是可以基于市场的变化,方便的切换不同厂商的连接池。