SpringBoot下的常用数据源整合总结。
数据源介绍
常用数据源
SpringBoot常用的数据源包括:
- HikariCP:一个高性能的JDBC连接池,是Spring Boot默认的数据源。
- Druid:阿里巴巴开源的关系型数据库连接池和监控平台。
- C3P0:另一个稳定的JDBC连接池,尤其适用于长时间运行的应用程序。
- Apache Commons DBCP:另一个流行的JDBC连接池。
- Tomcat JDBC Pool:来自Tomcat的JDBC连接池实现。
- BoneCP:一个快速、轻量级的JDBC连接池。
前面四种比较常见,后面集中作为了解。具体选择哪种数据源取决于个人需求和性能优化要求。
性能:HiKariCP > Druid > DBCP > C3P0
ORM框架与自定义连接池
通常情况下,ORM框架会默认使用Spring Boot提供的连接池实现(例如Tomcat JDBC或HikariCP),这样就不需要额外配置连接池。但如果想要使用其他类型的连接池,也可以手动配置。
MybatisPlus默认使用的数据源是什么?MybatisPlus默认使用的数据源是Druid数据源。但是SpringBoot中使用的HikariCP数据源会覆盖MybatisPlus默认使用的Druid数据源。这是因为SpringBoot对于数据源的配置有自己的一套机制,会默认加载自带的HikariCP数据源,并将其作为默认数据源进行使用。当我们在项目中引入MybatisPlus时,它也会使用SpringBoot中的默认数据源,也就是HikariCP数据源。
SpringBoot自动装配Datasource
先欠着
HikariCP连接池(默认)
在SpringBoot2.0中,默认使用HikariCP连接池。
HikariCP简介
HikariCP是一个高性能、轻量级、可靠的JDBC连接池,具有快速启动、低延迟和高吞吐量等特点。它是目前最快的开源JDBC连接池,被广泛应用于Java应用程序中。
HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在酷睿i7开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。
与其他JDBC连接池相比,HikariCP具有以下优势:
- 快速启动和低延迟:HikariCP采用了轻量级的设计,可以在瞬间启动,并且具有非常低的延迟,适合对响应时间要求较高的应用场景。
- 高吞吐量:HikariCP利用了多线程技术,可以同时处理大量的数据库请求,从而提高系统的吞吐量。
- 可靠性高:HikariCP支持连接池监控和心跳检测机制,可以及时识别连接故障并修复,提高应用程序的可靠性。
- 易于使用:HikariCP提供了简单易用的API接口,开发人员可以轻松地将其集成到Java应用程序中,大大减少了开发工作量。

配置过程
导入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version> <scope>runtime</scope> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
|
1 2 3 4 5 6
| <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>
|
application.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=123456
# JDBC驱动程序的完全限定名称,默认情况下,基于URL自动检测。 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据源类型,SpringBoot2以后默认HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource #连接池名称,默认HikariPool-1 spring.datasource.hikari.pool-name=YqHikariPool #最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 spring.datasource.hikari.maximum-pool-size=12 #连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 spring.datasource.hikari.connection-timeout=60000 #最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.minimum-idle=10 #空闲连接超时时间:毫秒,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 # 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放 spring.datasource.hikari.idle-timeout=540000 #连接最大存活时间:毫秒.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 spring.datasource.hikari.max-lifetime=540000 #连接测试查询 spring.datasource.hikari.connection-test-query=SELECT 1
|
整合MybatisPlus
MybatisPlus默认使用的数据源是Druid数据源。但是SpringBoot中使用的HikariCP数据源会覆盖MybatisPlus默认使用的Druid数据源。
添加依赖
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency>
|
业务代码此处省略,与文章整合ORM框架
相同。
运行测试
可以看到,顺利查出数据,并且使用的是HikariCP数据源

Druid连接池
Druid简介
官方文档:https://github.com/alibaba/druid
Druid(德鲁伊)是阿里巴巴开源的一个数据库连接池和监控平台,相比于传统的连接池它具有以下特点:
- 高效性:Druid具有更快的连接获取和释放速度,以及更好的性能表现。
- 安全性:Druid支持多种安全特性,如防SQL注入、用户权限控制等。
- 可扩展性:Druid提供了多样化的插件机制,可以方便地扩展其功能。
- 监控性:Druid集成了强大的监控功能,可以方便地对数据库连接池进行监控和分析。
在SpringBoot中整合Druid数据源非常简单,只需要添加Druid Starter依赖,并在配置文件中指定相关属性即可。同时,Druid还提供了一套完善的web监控平台,可以观察数据库连接情况、SQL执行情况、慢查询情况等,非常适合在生产环境中使用。
配置过程
导入依赖
替换jdbc,不替代mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.17</version> </dependency>
|
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 username: root password: 123456 druid: initial-size: 5 max-active: 20 min-idle: 5 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 validation-query: SELECT 1 FROM DUAL test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: true
|
整合MybatisPlus
业务代码如上所示,可以看到:

我们查询成功,并且使用的是Druid数据源
C3P0连接池
简介
C3P0连接池是一个Java库,用于管理JDBC连接。它提供了连接池和数据库连接管理器的实现,以便在应用程序中使用JDBC连接时更高效地使用数据库。C3P0连接池还提供了一些额外的功能:
- 连接池管理:自动跟踪连接状态,重试失败的连接,并处理空闲超时和资源泄漏等问题。
- 连接配置:可以设置连接的最大数量、最小数量、最大空闲时间,以及其他属性。
- 连接检查:可以设置定期检查连接是否有效,并清除无效连接。
- JDBC 3.0支持:支持JDBC 3.0规范中定义的DataSource接口。
- 数据源实现:提供了两种数据源实现方式,分别为ComboPooledDataSource和DriverManagerDataSource。
C3P0连接池可以大大提高应用程序与数据库之间的性能和可靠性,减少数据库连接资源的浪费和管理负担。
配置过程
导入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13
| <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency>
|
在SpringBoot2中,可以使用YAML格式的配置文件来配置C3P0连接池。以下是一个示例:
1 2 3 4 5 6 7 8 9 10
| spring: datasource: type: com.mchange.v2.c3p0.ComboPooledDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true username: root password: 123456 maxPoolSize: 20 minPoolSize: 2
|
整合MybatisPlus
业务代码如上所示,可以看到:

我们查询成功,并且使用的是C3P0数据源。