springboot 数据库连接核心是依靠自动装配机制,引入对应数据库驱动 starter 之后,在配置文件填写 url 账号 密码 驱动类,框架就会自动创建数据源,默认使用 HikariCP 连接池,不需要手写大量 JDBC 原生代码,这也是 springboot 开发最基础的核心能力。大部分项目会搭配 MyBatis 或者 JPA,但是底层依旧是这套数据源连接配置,新手经常踩坑的点包括驱动类名称写错 url 参数缺失 时区没有配置 连接池参数不合理 数据库权限不足,项目启动直接报连接失败,掌握基础配置 连接池调优 常见报错排查,就能稳定完成 springboot 数据库连接,支持 mysql oracle postgresql 等主流数据库。
基础依赖引入
maven 项目 pom.xml 需要添加依赖
spring-boot-starter-jdbc 基础 jdbc 支持
mysql-connector-j mysql 官方驱动,新版本 springboot 推荐这个包,旧版本是 mysql-connector-java
如果使用 mybatis,额外引入 mybatis-spring-boot-starter
核心配置项 application.yml
spring
datasource
url jdbc:mysql://127.0.0.1:3306/testdb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username root
password 123456
driver-class-name com.mysql.cj.jdbc.Driver
type com.zaxxer.hikari.HikariDataSource
配置字段说明表格
| 配置项 | 说明 |
|---|---|
| url | 数据库连接地址,包含 ip 端口 库名 附加参数 |
| username | 数据库登录账号 |
| password | 数据库登录密码 |
| driver-class-name | 驱动全限定类名,mysql8 使用 cj 包 |
| type | 指定连接池实现,默认 HikariCP |
HikariCP 连接池常用参数
maximum-pool-size 最大连接数,默认 10
minimum-idle 最小空闲连接,默认和最大连接一致
connection-timeout 获取连接超时时间,单位毫秒
idle-timeout 空闲连接超时回收时间
max-lifetime 连接最大存活时间,要小于数据库侧 wait_timeout
不同数据库 url 与驱动对照表
| 数据库 | 驱动类 | url 前缀 |
|---|---|---|
| mysql8 | com.mysql.cj.jdbc.Driver | jdbc:mysql |
| postgresql | org.postgresql.Driver | jdbc:postgresql |
| oracle | oracle.jdbc.OracleDriver | jdbc:oracle:thin |
完整使用步骤
第一步 创建 springboot 项目,在 pom.xml 加入 jdbc starter 和对应数据库驱动依赖
第二步 打开 application.yml,填写数据库 url 账号密码 驱动类,mysql8 一定要加上时区参数 serverTimezone
第三步 启动项目,springboot 自动装配数据源,底层初始化 Hikari 连接池
第四步 编写测试类,注入 JdbcTemplate,执行查询 sql 验证 springboot 数据库连接是否成功
第五步 根据业务并发量,调整连接池最大连接数等参数,做性能优化
第六步 如果启动报错,按照报错信息排查网络 账号密码 端口 防火墙 时区 驱动版本问题
高频报错清单
第一类 Communications link failure 一般是 ip 端口不通 数据库没启动 防火墙拦截
第二类 Public Key Retrieval is not allowed url 增加 allowPublicKeyRetrieval=true
第二类 The server time zone value 没有配置 serverTimezone 时区
第四类 ClassNotFoundException 驱动包没有引入,或者 driver-class-name 填写错误
第五类 Access denied for user 账号密码错误,或者账号没有远程访问权限
springboot 数据库连接本质是自动装配数据源,默认 Hikari 连接池,重点是 yml 配置正确,mysql8 注意驱动类和时区参数,合理设置连接池参数,出现报错优先检查网络权限和 url 参数,验证成功之后就可以基于 JdbcTemplate MyBatis JPA 开展业务开发。
【常见问题】
问题 1 springboot 数据库连接默认使用什么连接池
回答 1 springboot 数据库连接默认采用 HikariCP 连接池,性能轻量高效,是 springboot 官方默认数据源实现。
问题 2 springboot 数据库连接 mysql8 为什么要配置 serverTimezone
回答 2 springboot 数据库连接 mysql8 的时候,数据库和应用时区不一致会直接启动报错,所以 url 里面必须配置 serverTimezone=Asia/Shanghai。
问题 3 springboot 数据库连接报 Communications link failure 怎么处理
回答 3 springboot 数据库连接出现 Communications link failure,优先检查数据库是否启动,ip 端口是否可达,防火墙是否放行,账号是否允许远程登录。
问题 4 springboot 数据库连接必须写 driver-class-name 吗
回答 4 springboot 数据库连接新版可以自动识别驱动,但是推荐手动填写 driver-class-name,避免自动识别失败,mysql8 需要写 com.mysql.cj.jdbc.Driver。
【免责申明】
本内容仅作为 springboot 开发学习参考,不同 springboot 版本 数据库版本配置存在差异,生产环境请结合版本官方文档调整,注意数据库账号安全。


