• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Spring Boot数据库链接池配置方法

Spring Boot数据库链接池配置方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了spring数据库连接池,数据库连接池,数据库连接池配置,java数据库连接池,数据库连接池有哪些等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

配置方法

基于当前的1.5.2.RELEASE的Spring Boot。

依照官方文档,如果增加了如下依赖的配置,或者类路径中存在spring-boot-starter-jdbc的jar,那么已默认启用了数据库链接池。

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency>
</div>

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'
</div>

    logging:

 level:
  # 关闭其它软件的日志,减少干扰
  org: ERROR
  net: ERROR
  com: ERROR
  # 开启MySQL JDBC驱动的日志
  MySQL: DEBUG
</div>

上述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);
  }
}
</div>

同时修改application.yml,增加相应的日志配置,如下。

logging:
  level:
    # 开启MySQL JDBC驱动的日志
    MySQL: DEBUG
</div>

如下是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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Spring 数据库连接池(JDBC)详解
  • Spring Boot集成Druid数据库连接池
  • Spring Boot数据库链接池配置方法
  • Spring 数据库连接池(JDBC)详解
  • Spring Boot集成Druid数据库连接池
  • Spring Boot数据库链接池配置方法

相关文章

  • 2017-05-28浅析对Java关键字final和static的理解
  • 2017-05-28深入理解Java嵌套类和内部类
  • 2017-05-28spring boot如何添加拦截器
  • 2017-05-28Struts2 控制文件上传下载功能实例代码
  • 2017-05-28Spring MVC 关于controller的字符编码问题
  • 2018-11-21JBoss中事务超时的解决方案
  • 2017-05-28Java Scaner类详解_动力节点Java学院整理
  • 2017-05-28Java实现纪元秒和本地日期时间互换的方法【经典实例】
  • 2017-05-28Servlet实现多文件上传功能
  • 2017-05-28Java Config下的Spring Test几种方式实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Spring Session实现分布式session的简单示例
    • Java 中的 DataInputStream 介绍_动力节点Java学院整理
    • Spring基于注解整合Redis完整实例
    • java中Serializable接口作用详解
    • Java栈之链式栈存储结构的实现代码
    • Java 数组分析及简单实例
    • Ubuntu安装JDK详解
    • 微信开发准备第二步 springmvc mybatis项目结构搭建
    • Spring Boot 快速入门指南
    • Java使用NioSocket手动实现HTTP服务器

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有