SpringBoot 整合 数据库连接池(Druid、HicariCP、C3P0 等等)
1、连接池介绍
在 jdbc 的基础上,我们发现来回的获得数据库连接返回数据库连接给数据库会大大降低数据库的执行效率。所以我们可以采用使用连接池的方式来放置连接、获取连接。当我们需要数据库连接的时候,我们不在向数据库获取,而是从连接池中获得数据库的连接,用完连接之后也不再返回给数据库,而是直接返回给连接池。这样数据库的效率的到很大的提升。
常用的数据库连接池有两种:DCBP、C3P0、HikariCP 和 Druid 等。
2、HicariCP
Hikari 是一款非常强大,高效,并且号称“史上最快连接池”。由于其性能方面比较好,并且在 springboot2.0 之后,采用的默认数据库连接池就是 HikariCP,在引用 parents 后不用专门再添加依赖。
1)导入坐标
2)修改配置
一些常用的配置选项
3)优势
字节码精简:优化代码,直到编译后的字节码最少,这样,CPU 缓存可以加载更多的程序代码;
优化代理和拦截器:减少代码,例如 HikariCP 的 Statement proxy 只有 100 行代码,只有 BoneCP 的十分之一;
自定义数组类型(FastStatementList)代替 ArrayList:避免每次 get()调用都要进行 range check,避免调用 remove()时的从头到尾的扫描;
自定义集合类型(ConcurrentBag):提高并发读写的效率;
其他针对 BoneCP 缺陷的优化,比如对于耗时超过一个 CPU 时间片的方法调用的研究(但没说具体怎么优化)。
3、Druid
1)导入坐标
导入对应的坐标(starter)
2)修改配置
修改配置,在数据源配置中有一个 type 属性,专用于指定数据源类型
注意观察,配置项中,在 datasource 下面并不是直接配置 url 这些属性的,而是先配置了一个 druid 节点,然后再配置的 url 这些东西,通过提示功能可以打开 druid 相关的配置查阅。
3)优势
Druid 相对于其他数据库连接池的优点:
强大的监控特性,通过 Druid 提供的监控功能,可以清楚知道连接池和 SQL 的工作情况
监控 SQL 的执行时间、ResultSet 持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
SQL 执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个 SQL 执行了 1000 次,其中 0~1 毫秒区间 50 次,1~10 毫秒 800 次,10~100 毫秒 100 次,100~1000 毫秒 30 次,1~10 秒 15 次,10 秒以上 5 次。通过耗时区间分布,能够非常清楚知道 SQL 的执行耗时情况。
监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache 命中率等
方便扩展,Druid 提供了 Filter-Chain 模式的扩展 API,可以自己编写 Filter 拦截 JDBC 中的任何方法,可以在上面做任何事情,比如说性能监控、SQL 审计、用户名密码加密、日志等等。
Druid 集合了开源和商业数据库连接池的优秀特性,并结合阿里巴巴大规模苛刻生产环境的使用经验进行优化。
总结
整合连接池需要导入连接池对应的 starter
根据连接池提供的配置方式进行配置
整合第三方技术通用方式
导入对应的 starter
根据提供的配置格式,配置非默认值对应的配置项
版权声明: 本文为 InfoQ 作者【斯】的原创文章。
原文链接:【http://xie.infoq.cn/article/a58c3c93585dec48a62fb8999】。文章转载请联系作者。
评论