Spring本身不提供数据库连接池,但可集成HikariCP(Spring Boot默认)、Druid等;需正确配置数据源Bean,Spring Boot通过自动配置简化接入,传统Spring需手动声明。

Spring 本身不提供数据库连接池实现,但能无缝集成主流连接池(如 HikariCP、Druid、Tomcat JDBC Pool),关键在于正确配置数据源 Bean 和启用自动配置(Spring Boot)或手动声明(传统 Spring)。
Spring Boot 下推荐用 HikariCP(默认)
Spring Boot 2.0+ 默认内置 HikariCP,只需添加依赖和基础配置即可自动装配:
- 在 pom.xml 中确认已引入 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa(它们都传递依赖 HikariCP)
- 在 application.yml 中配置数据源信息和 Hikari 参数:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# Hikari 特有配置(可选)
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 1800000
connection-timeout: 3000
Spring Boot 会自动创建 HikariDataSource Bean,并注入到 JdbcTemplate、JPA EntityManager 等组件中。
想换用 Druid(阿里开源)
Druid 提供监控和 SQL 防火墙能力,适合需要运维可观测性的场景:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 排除默认 Hikari,引入 Druid 依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.20</version> </dependency>
- 配置示例(application.yml):
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
<h1>Druid 专属配置</h1><p>spring:
datasource:
druid:
initial-size: 5
min-idle: 5
max-active: 20
stat-view-servlet:
enabled: true
url-pattern: /druid/*
web-stat-filter:
enabled: true
启动后访问 http://localhost:8080/druid 即可查看连接池状态、SQL 监控等。
传统 Spring(XML 或 Java Config)手动配置
若未使用 Spring Boot,需显式定义 DataSource Bean:
- Java Config 方式(推荐):
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("123456");
config.setMaximumPoolSize(10);
return new HikariDataSource(config);
}
}
- 确保该配置类被 @ComponentScan 扫描到,或在主配置中显式导入
- Spring 会自动将此 DataSource 注入到 JdbcTemplate、TransactionManager 等需要的地方
验证是否生效的小技巧
加个测试接口或启动时打印数据源类型,快速确认连接池是否按预期加载:
@RestController
public class DbTestController {
@Autowired
private DataSource dataSource;
<pre class="brush:php;toolbar:false;">@GetMapping("/ds")
public String checkDataSource() {
return "Type: " + dataSource.getClass().getSimpleName();
// 启动后访问 /ds,应输出 HikariDataSource 或 DruidDataSource
}}
配合日志级别设为 DEBUG(如 logging.level.com.zaxxer.hikari=DEBUG),还能看到连接获取、回收的详细过程。

















