一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot數據庫鏈接池配置方法

Spring Boot數據庫鏈接池配置方法

2020-09-12 15:36 Java教程

這篇文章主要介紹了Spring Boot數據庫鏈接池配置方法,需要的朋友可以參考下

配置方法

基于當前的1.5.2.RELEASE的Spring Boot

依照官方文檔,如果增加了如下依賴的配置,或者類路徑中存在spring-boot-starter-jdbc的jar,那么已默認啟用了數據庫鏈接池。

?
1
2
3
4
<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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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:

?
1
2
3
4
5
6
7
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驅動文檔,可以配置一個日志記錄器,用于記錄其工作時的輸出,如下是實現樣例。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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,增加相應的日志配置,如下。

?
1
2
3
4
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數據庫鏈接池配置方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 蜜桃久久久亚洲精品成人 | 精品成人一区二区三区免费视频 | 天天色天天综合 | 亚洲精品国产成人 | 亚洲系列在线 | 黄+色+性+人免费 | 欧美日韩精品一区二区三区视频在线 | 亚洲视频在线免费 | 久久视频这有精品63在线国产 | 失禁尿丝袜vk | 成人欧美一区二区三区黑人 | 久久国产精品永久免费网站 | a毛片免费观看完整 | 欧美夫妇野外交换hd高清版 | 国产精品第一 | 久9视频这里只有精品123 | 国产成人精品一区二区仙踪林 | 99精品视频只99有精品 | 久久理论片迅播影院一级 | 免费日批软件 | 亚洲欧美日韩高清 | 国产高清在线播放刘婷91 | 日韩精品成人免费观看 | 二区三区视频 | 精品免费tv久久久久久久 | 粉嫩极品国产在线观看免费 | 丝瓜视频在线观看污 | 99热最新在线观看 | 成年人在线播放视频 | 国产精品男人的天堂 | 女人被男人躁得好爽免费视频 | 亚洲网站在线观看 | ysl千人千色t9t9t9 | 成人a级特黄毛片 | 女人与zzzooooxxx | 日本高清中文 | 国内自拍2020 | 波多野结衣作品在线观看 | 亚洲精品欧洲久久婷婷99 | 国产高清国内精品福利色噜噜 | 免费国产网站 |