天天看點

Springboot整合tomcat資料庫連接配接池1、配置檔案前言

1、配置檔案

spring:
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        jdbcUrl: jdbc:mysql://127.0.0.1:8080/database?useUnicode=true&characterEncoding=utf-8&useSSL=true
        username: root
        password: 12345678
        driver-class-name: com.mysql.jdbc.Driver
      tomcat:
        max-wait: 10000
        max-active: 300
        validation-query: "SELECT 1"
        test-on-borrow: true
        initial-size: 1
           

以下轉自:https://blog.csdn.net/zougen/article/details/85046958

前言

連接配接池本質作用是為用戶端提供連接配接複用,提升連接配接效率,降低系統開銷。Tomcat的連接配接池提供了maxActive,maxWait,maxIdle,minIdle,initialSize等參數,配置連接配接池的大小,使用者根據自身業務需求配置這幾個參數。同時,因為對端資料庫伺服器狀态不受tomcat控制,是以tomcat需要有檢查連接配接可用性的機制,通過testOnBorrow,testWhileIdle等選項使用者可以告訴tomcat是否檢查連接配接可用性以及如何檢查。

1,連接配接池大小及性能選項

maxActive

:最主要參數,配置連接配接池同時能維持的最大連接配接數,如果用戶端理論上需要100個連接配接,則這個值設為100。

maxIdle

:如果用戶端一段時間内不需要使用連接配接,如果一直把所有連接配接池中的所有連接配接都維持在活動狀态是很浪費資源的,maxIdle這個選項告訴tomcat,如果用戶端沒有需求,那麼最多元持maxIdle個空閑連接配接。

minIdle

:和maxIdle類似,maxIdle告訴tomcat最多元持多少個空閑連接配接,minIdle告訴tomcat即使用戶端沒有需求,也要至少維持多少個空閑連接配接,以應對用戶端的突發需求。

initialSize

:連接配接池啟動時要初始化多少個連接配接,即使用戶端這是沒有需求,也會初始化空閑連接配接。

maxWait

:連接配接池出借連接配接的最長期限,機關是毫秒,比如設為10000ms,用戶端從連接配接池擷取(借出)一個連接配接後,10000毫秒沒有歸還(return),則連接配接池會抛出異常。

maxAge

:連接配接池中一個連接配接的壽命,連接配接池初始化一個連接配接後,會記下初始化的時間,以後每次出借,或有用戶端歸還這個連接配接時,連接配接池會檢查

目前時間 - 初始化時間 > maxAge

,如果超過maxAge,連接配接池會删除這個連接配接。

2,連接配接檢查選項

mysql5以後,如果連接配接長時間不活動 (34,247,052 ms≈ 9.5 小時),mysql資料庫會斷開連接配接,這會導緻異常:MySQLNonTransientConnectionException: No operations allowed after connection closed,以下選項将會告訴連接配接池,主動檢查連接配接可用性,避免這個異常發生。

validationQuery

:檢查連接配接可用性的語句,一般來說mysql設定成

SELECT 1

, oracle設定成

select 1 from dual

, sql server設定成

SELECT 1

,在檢查連接配接可用性時,連接配接池會執行這些語句,如果傳回結果不為空,則說明連接配接可用。

validationQueryTimeout

:執行連接配接檢查語句時的逾時時間。

上面兩個選項告訴連接配接池如何檢查連接配接有效性,下面幾個選項告訴連接配接池在何時檢查連接配接有效性

testOnConnect

: 在連接配接初始化時執行連接配接可用性檢查

testOnBorrow

:在借出連接配接時檢查連接配接可用性

testOnReturn

:在用戶端歸還連接配接時檢查連接配接可用性

testWhileIdle

:在檢查閑置連接配接時同時檢查連接配接可用性

3,一個典型的連接配接池設定

<Resource name="jdbc/your-jndi-name" auth="Container" type="javax.sql.DataSource"
  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
  maxActive="30" 
  maxIdle="10" 
  minIdle="5" 
  maxWait="100000" 
  initialSize="5" 
  testWhileIdle="true"
  testOnBorrow="true" 
  testOnReturn="false" 
  validationQuery="SELECT 1" 
  validationInterval="30000" 
  timeBetweenEvictionRunsMillis="30000" 
  maxAge="14400000"
  username="your-username" password="your-password" 
  driverClassName="com.mysql.cj.jdbc.Driver" 
  url="jdbc:mysql://host-address:3306/your-db-name?useUnicode=true&amp;characterEncoding=utf-8&amp;disableMariaDbDriver"/>
           

繼續閱讀