Spring Boot「17」数据库连接池
Spring Boot 2.x 之后,默认使用 HikariCP 作为其默认的数据库连接池组件,在 1.x 版本中,使用的是 Tomcat Connection Pool。使用数据库连接池的出发点与线程池类似,通过将链接保存在连接池中来减少频繁创建、关闭连接的性能损失,以提升应用的整体性能。
01-简易的连接池实现
虽然业界已经存在许多非常成熟、性能优良的数据库连接池组件,例如 HikariCP、Tomcat Connection Pool、DBCP、C3P0 等。从价值上看,重复造轮子是一件费力不讨好的事情;但从学习连接池基本思想的角度上看,通过实现一个简易的连接池来探究数据库连接池的基本工作原理是非常有意义,且有价值的。
首先,我们定义一个连接池接口:
它虽然简单,但是基本上涵盖了一个数据库连接池应当支持的最基础操作。之后,我们可以尝试实现它。
如何使用自定义的数据库连接池呢?
如何关闭连接池?
02-常用的连接池组件
业界常用的数据库连接池组件有:HikariCP、Apache Commons DBCP、C3P0、Tomcat Connection Pool 等;Spring Boot 2.x 版本以后,默认使用 HikariCP。如果想使用其他的数据库连接池可以按照如下方法替换:
在 pom.xml 中排除 HikariCP 的依赖
增加其他的数据库连接池实现,例如 Tomcat Connection Pool(Spring Boot 1.x 默认的数据库连接池)
运行 Spring Boot 应用,发现 DataSource 已经是org.apache.tomcat.jdbc.pool.DataSource
类型。关于 Spring Boot 查找数据库链接池的算法细节,可以参考官网Supported Connection Pools。
不同数据库连接池使用得 DataSource 类型(Spring Boot 会根据 classpath 下 jar 包自动创建 DataSource Bean):
HikariCP,
com.zaxxer.hikari.HikariDataSource
Tomcat Connection Pool,
org.apache.tomcat.jdbc.pool.DataSource
Commons DBCP2,
org.apache.commons.dbcp2.BasicDataSource
如果要自定义各种设置,可以通过如下方式:
上述 DataSource 也支持通过 Spring DataSourceBuilder 手动创建。例如(等价于上述的写法):
除此之外,还支持下述类型的 DataSource。
Spring JDBC,
org.springframework.jdbc.datasource.SimpleDriverDataSource
H2 JdbcDataSource
PostgreSQL PGSimpleDataSource
C3P0,
com.mchange.v2.c3p0.ComboPooledDataSource
版权声明: 本文为 InfoQ 作者【Samson】的原创文章。
原文链接:【http://xie.infoq.cn/article/15aaccf9d54bbd188ec866e9a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论