Spring Boot配置数据库链接池
来源:互联网 发布:免费工程造价软件 编辑:程序博客网 时间:2024/06/05 01:06
配置方法
基于当前的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选择数据库链接池实现的判断逻辑: - 检查Tomcat的数据库链接池实现是否可用,如可用,则启用。使用
spring.datasource.tomcat.*
可以控制链接池的行为。 - 检查HikariCP是否可用,如可用,则启用。使用
spring.datasource.hikari.*
可以控制链接池的行为。 - 检查Commons DBCP是否可用,如可用,则启用;但Spring Boot不建议在生产环境使用该链接池的实现。
- 检查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_timeout2017-04-16 00:51:32.629 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 36 connection: 93 statement: 1 resultset: 12017-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 latin12017-04-16 00:51:32.640 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 02017-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 = NULL2017-04-16 00:51:32.643 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 02017-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=12017-04-16 00:51:32.646 FETCH created: Sun Apr 16 00:51:32 CST 2017 duration: 0 connection: 93 statement: 999 resultset: 02017-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的链接池配置
- spring jdbc连接池的配置
- Spring - Tomcat jdbc pool 配置
- spring配置tomcat jdbc连接池教程
- 在spring配置jdbc-pool连接池
- Spring下配置几种常用连接池
Spring Boot的链接池的配置
- Spring Boot Reference Guide
- Spring Boot JDBC 连接数据库
- Spring Boot 修改数据库连接池
- SpringBoot配置属性之DataSource
- Spring boot · 链接池配置
Tomcat的链接池的配置
- Tomcat 的 JDBC 连接池
- Apache Tomcat 8.5 - The Tomcat JDBC Connection Pool
- Apache Tomcat 8.0 - The Tomcat JDBC Connection Pool
MySQL JDBC
- 6.0 Configuration Properties
- Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J
查看原文:http://www.jackieathome.net/archives/487.html
0 0
- Spring Boot配置数据库链接池
- Spring Boot链接数据库操作及配置
- [spring-boot] 配置数据库
- Druid Spring Boot Starter数据库链接池新福利
- spring boot 配置数据库加密
- spring配置dbcp链接数据库
- Spring Boot 配置JdbcTemplate访问数据库
- spring boot 链接额
- spring boot application properties配置详解(附官网链接)
- spring boot 连接池配置
- spring boot 线程池配置
- spring 常用的数据库链接配置
- hibernate链接数据库链接池c3p0配置
- spring boot 快速入门链接
- 配置数据库链接池 tomcat
- spring boot 使用h2数据库配置(内存模式)
- Spring Boot 学习第二步 配置MySQL数据库+JPA
- Spring Boot+Maven 工程配置h2内存数据库
- 算法面试题:使用两个堆栈实现一个队列
- android学习笔记(2)
- 九度oj 题目1008:最短路径问题
- 抽象类和匿名方法的使用
- 奇葩设置能加快Android studio的运行效率
- Spring Boot配置数据库链接池
- Frame、JPanel、JApplet的布局管理器是什么
- 方法重写与super限定
- java对象和类
- 1094. The Largest Generation (25)
- 数组类型 初始化
- Div+CSS两种盒子模型
- 表的主键与外键
- 02-线性结构3 Reversing Linked List (25分)