Spring Boot数据库链接池配置方法
发布时间 - 2026-01-11 00:41:00 点击率:次配置方法

基于当前的1.5.2.RELEASE的Spring Boot。
依照官方文档,如果增加了如下依赖的配置,或者类路径中存在spring-boot-starter-jdbc的jar,那么已默认启用了数据库链接池。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
Spring Boot选择数据库链接池实现的判断逻辑:
1.检查Tomcat的数据库链接池实现是否可用,如可用,则启用。使用spring.datasource.tomcat.*可以控制链接池的行为。
2.检查HikariCP是否可用,如可用,则启用。使用spring.datasource.hikari.*可以控制链接池的行为。
3.检查Commons DBCP是否可用,如可用,则启用;但Spring Boot不建议在生产环境使用该链接池的实现。
4.检查Commons DBCP2是否可用,如可用,则启用。使用spring.datasource.dbcp2.*可以控制链接池的行为。
使用tomcat-jdbc时,可在application.yml增加配置项spring.datasource.tomcat.*来控制链接池的行为。比如如下配置。
spring:
datasource:
url: jdbc:mysql://localhost:3306/jackieathome?useSSL=false
username: root
password: mypassword
# 6.x版本的MySQL JDBC驱动类为com.mysql.cj.jdbc.Driver
# 5.X版本的MySQL JDBC驱动类为com.mysql.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver
tomcat:
max-wait: 10000
max-active: 30
test-on-borrow: true
# 传递MySQL JDBC特有的参数
db-properties:
logger: net.jackieathome.db.customized.MySQLLogger
gatherPerfMetrics: 'true'
profileSQL: 'true'
reportMetricsIntervalMillis: '60000'
logSlowQueries: 'true'
explainSlowQueries: 'true'
logging:
level: # 关闭其它软件的日志,减少干扰 org: ERROR net: ERROR com: ERROR # 开启MySQL JDBC驱动的日志 MySQL: DEBUG
上述spring.datasource.tomcat.*代表的配置项,可参考tomcat-jdbc的官方文档Apache Tomcat 8.5 - The Tomcat JDBC Connection Pool或者Apache Tomcat 8.0 - The Tomcat JDBC Connection Pool。
依据tomcat-jdbc的文档,如需要向数据库的JDBC驱动传入控制参数,可以使用db-properties字段。需要注意的是,当使用MySQL驱动时,控制参数的值需要强制转换为字符串,否则创建数据库链接时会报错。配置方法如上述样例中的 reportMetricsIntervalMillis: '60000'和logSlowQueries: 'true'。
依照MySQL JDBC驱动文档,可以配置一个日志记录器,用于记录其工作时的输出,如下是实现样例。
package net.jackieathome.db.customized;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MySQLLogger implements com.mysql.cj.api.log.Log {
private static Logger LOG;
public MySQLLogger(String name) {
LOG = LoggerFactory.getLogger(name);
}
@Override
public boolean isDebugEnabled() {
return LOG.isDebugEnabled();
}
@Override
public boolean isErrorEnabled() {
return LOG.isErrorEnabled();
}
@Override
public boolean isFatalEnabled() {
return LOG.isErrorEnabled();
}
@Override
public boolean isInfoEnabled() {
return LOG.isInfoEnabled();
}
@Override
public boolean isTraceEnabled() {
return LOG.isTraceEnabled();
}
@Override
public boolean isWarnEnabled() {
return LOG.isWarnEnabled();
}
@Override
public void logDebug(Object msg) {
LOG.debug("{}", msg);
}
@Override
public void logDebug(Object msg, Throwable thrown) {
LOG.debug("{}", msg, thrown);
}
@Override
public void logError(Object msg) {
LOG.error("{}", msg);
}
@Override
public void logError(Object msg, Throwable thrown) {
LOG.error("{}", msg, thrown);
}
@Override
public void logFatal(Object msg) {
LOG.error("{}", msg);
}
@Override
public void logFatal(Object msg, Throwable thrown) {
LOG.error("{}", msg, thrown);
}
@Override
public void logInfo(Object msg) {
LOG.info("{}", msg);
}
@Override
public void logInfo(Object msg, Throwable thrown) {
LOG.info("{}", msg, thrown);
}
@Override
public void logTrace(Object msg) {
LOG.trace("{}", msg);
}
@Override
public void logTrace(Object msg, Throwable thrown) {
LOG.trace("{}", msg, thrown);
}
@Override
public void logWarn(Object msg) {
LOG.warn("{}", msg);
}
@Override
public void logWarn(Object msg, Throwable thrown) {
LOG.warn("{}", msg, thrown);
}
}
同时修改application.yml,增加相应的日志配置,如下。
logging:
level:
# 开启MySQL JDBC驱动的日志
MySQL: DEBUG
如下是MySQL JDBC驱动输出的样例日志。
2017-04-16 00:51:32.626 QUERY created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 1 resultset: 1 message: /* mysql-connector-java-6.0.6 ( Revision: 3dab84f4d9bede3cdd14d57b99e9e98a02a5b97d ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS tx_isolation, @@wait_timeout AS wait_timeout
2017-04-16 00:51:32.629 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 36 connection: 93 statement: 1 resultset: 1
2017-04-16 00:51:32.639 QUERY created: Sun Apr 16 00:51:32 CST 2017 duration: 1 connection: 93 statement: 999 resultset: 0 message: SET NAMES latin1
2017-04-16 00:51:32.640 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 0
2017-04-16 00:51:32.642 QUERY created: Sun Apr 16 00:51:32 CST 2017 duration: 2 connection: 93 statement: 999 resultset: 0 message: SET character_set_results = NULL
2017-04-16 00:51:32.643 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 0
2017-04-16 00:51:32.645 QUERY created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 0 message: SET autocommit=1
2017-04-16 00:51:32.646 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 0
2017-04-16 00:51:32.667 QUERY created: Sun Apr 16 00:51:32 CST 2017 duration: 1 connection: 94 statement: 2 resultset: 2 message: /* mysql-connector-java-6.0.6 ( Revision: 3dab84f4d9bede3cdd14d57b99e9e98a02a5b97d ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS tx_isolation, @@wait_timeout AS wait_timeout
以上所述是小编给大家介绍的Spring Boot数据库链接池配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# spring
# boot
# 数据库
# 如何把spring boot项目部署到tomcat容器中
# springboot + mybatis配置多数据源示例
# 详解SpringBoot文件上传下载和多文件上传(图文)
# Spring Boot MyBatis 连接数据库配置示例
# Spring Boot使用FastJson解析JSON数据的方法
# Spring Boot 启动端口如何启动
# springboot与mybatis整合实例详解(完美融合)
# 文档
# 样例
# 小编
# 的是
# 记录器
# 在此
# 可在
# 给大家
# 可以使用
# 特有的
# 报错
# 如需
# 要向
# 转换为
# 所述
# 需要注意
# 给我留言
# 感谢大家
# 增加了
# 疑问请
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
制作电商网页,电商供应链怎么做?
图册素材网站设计制作软件,图册的导出方式有几种?
免费网站制作appp,免费制作app哪个平台好?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
黑客如何通过漏洞一步步攻陷网站服务器?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
如何用JavaScript实现文本编辑器_光标和选区怎么处理
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
大连 网站制作,大连天途有线官网?
如何用低价快速搭建高质量网站?
如何撰写建站申请书?关键要点有哪些?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
魔毅自助建站系统:模板定制与SEO优化一键生成指南
七夕网站制作视频,七夕大促活动怎么报名?
Python图片处理进阶教程_Pillow滤镜与图像增强
如何正确下载安装西数主机建站助手?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel怎么实现模型属性的自动加密
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Python正则表达式进阶教程_复杂匹配与分组替换解析
html5的keygen标签为什么废弃_替代方案说明【解答】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel如何处理和验证JSON类型的数据库字段
如何基于云服务器快速搭建个人网站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
微信小程序 input输入框控件详解及实例(多种示例)
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何在IIS中配置站点IP、端口及主机头?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Swift中循环语句中的转移语句 break 和 continue
个人摄影网站制作流程,摄影爱好者都去什么网站?
详解Android中Activity的四大启动模式实验简述
打造顶配客厅影院,这份100寸电视推荐名单请查收

