Tomcat JDBC 連接池
Spring Boot 默認選擇 Tomcat JDBC Pool 作為數據庫連接池。Tomcat(8) 連接池常用的屬性:
屬性 | 描述 | 默認值 |
---|---|---|
defaultAutoCommit | 連接池中創建的連接默認是否自動提交事務 | 驅動的缺省值 |
defaultReadOnly | 連接池中創建的連接默認是否為只讀狀態 | - |
defaultCatalog | 連接池中創建的連接默認的 catalog | - |
driverClassName | 驅動類的名稱 | - |
username | 數據庫賬戶 | - |
password | 數據庫密碼 | - |
maxActive | 連接池同一時間可分配的最大活躍連接數 | 100 |
maxIdle | 始終保留在池中的最大連接數,如果啟用,將定期檢查限制連接,超出此屬性設定的值且空閑時間超過minEvictableIdleTimeMillis的連接則釋放 | 與maxActive設定的值相同 |
minIdle | 始終保留在池中的最小連接數,池中的連接數量若低於此值則創建新的連接,如果連接驗證失敗將縮小至此值 | 與initialSize設定的值相同 |
initialSize | 連接池啟動時創建的初始連接數量 | 10 |
maxWait | 最大等待時間(毫秒),如果在沒有連接可用的情況下等待超過此時間,則拋出異常 | 30000(30秒) |
testOnBorrow | 當從連接池中取出一個連接時是否進行驗證,若驗證失敗則從池中刪除該連接並嘗試取出另一個連接 | false |
testOnConnect | 當一個連接首次被創建時是否進行驗證,若驗證失敗則拋出 SQLException 異常 | false |
testOnReturn | 當一個連接使用完歸還到連接池時是否進行驗證 | false |
testWhileIdle | 對池中空閑的連接是否進行驗證,驗證失敗則回收此連接 | false |
validationQuery | 在連接池返回連接給調用者前用來對連接進行驗證的查詢 SQL | null |
validationQueryTimeout | SQL 查詢驗證超時時間(秒),小於或等於 0 的數值表示禁用 | -1 |
timeBetweenEvictionRunsMillis | 在空閑連接回收器線程運行期間休眠時間(毫秒), 該值不應該小於 1 秒,它決定線程多久驗證空閑連接或丟棄連接的頻率 | 5000(5秒) |
minEvictableIdleTimeMillis | 連接在池中保持空閑而不被回收的最小時間(毫秒) | 60000(60秒) |
removeAbandoned | 標記是否刪除泄露的連接,如果連接超出removeAbandonedTimeout的限制,且該屬性設置為 true,則連接被認為是被泄露並且可以被刪除 | false |
removeAbandonedTimeout | 泄露的連接可以被刪除的超時時間(秒),該值應設置為應用程序查詢可能執行的最長時間 | 60 |
# src/main/resources/application.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.tomcat.default-auto-commit=true spring.datasource.tomcat.initial-size=3 spring.datasource.tomcat.max-active=120 spring.datasource.tomcat.max-wait=10000 spring.datasource.tomcat.test-on-borrow=true spring.datasource.tomcat.test-while-idle=true spring.datasource.tomcat.validation-query=SELECT 1 spring.datasource.tomcat.validation-query-timeout=3 spring.datasource.tomcat.time-between-eviction-runs-millis=10000 spring.datasource.tomcat.min-evictable-idle-time-millis=120000 spring.datasource.tomcat.remove-abandoned=true spring.datasource.tomcat.remove-abandoned-timeout=120 |
Spring Boot Data Jpa 依賴聲明:
# pom.xml
1 2 3 4 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> |
HikariCP 連接池
Spring Boot 如果發現 Tomcat 連接池不可用,則嘗試選擇 HikariCP 作為默認連接池。HikariCP 連接池常用的屬性:
屬性 | 描述 | 默認值 |
---|---|---|
dataSourceClassName | JDBC 驅動程序提供的 DataSource 類的名稱,如果使用了jdbcUrl則不需要此屬性 | - |
jdbcUrl | 數據庫連接地址 | - |
username | 數據庫賬戶,如果使用了jdbcUrl則需要此屬性 | - |
password | 數據庫密碼,如果使用了jdbcUrl則需要此屬性 | - |
autoCommit | 是否自動提交事務 | true |
connectionTimeout | 連接超時時間(毫秒),如果在沒有連接可用的情況下等待超過此時間,則拋出 SQLException | 30000(30秒) |
idleTimeout | 空閑超時時間(毫秒),只有在minimumIdle<maximumPoolSize時生效,超時的連接可能被回收,數值 0 表示空閑連接永不從池中刪除 | 600000(10分鍾) |
maxLifetime | 連接池中的連接的最長生命周期(毫秒)。數值 0 表示不限制 | 1800000(30分鍾) |
connectionTestQuery | 連接池每分配一條連接前執行的查詢語句(如:SELECT 1),以驗證該連接是否是有效的。如果你的驅動程序支持 JDBC4,HikariCP 強烈建議我們不要設置此屬性 | - |
minimumIdle | 最小空閑連接數,HikariCP 建議我們不要設置此值,而是充當固定大小的連接池 | 與maximumPoolSize數值相同 |
maximumPoolSize | 連接池中可同時連接的最大連接數,當池中沒有空閑連接可用時,就會阻塞直到超出connectionTimeout設定的數值 | 10 |
poolName | 連接池名稱,主要用於顯示在日志記錄和 JMX 管理控制台中 | auto-generated |
# src/main/resources/application.properties
1 2 3 4 5 6 7 |
spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.hikari.auto-commit=true spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.maximum-pool-size=150 |
Spring Boot Data Jpa 依賴聲明:
# pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.6.1</version> </dependency> |
DBCP 連接池
Spring Boot 如果發現 HikariCP 連接池不可用,則嘗試選擇 DBCP 作為默認連接池。DBCP(2) 連接池常用的屬性:
屬性 | 描述 | 默認值 |
---|---|---|
url | 數據庫連接地址 | - |
username | 數據庫賬戶 | - |
password | 數據庫密碼 | - |
driverClassName | 驅動類的名稱 | - |
defaultAutoCommit | 連接池中創建的連接默認是否自動提交事務 | 驅動的缺省值 |
defaultReadOnly | 連接池中創建的連接默認是否為只讀狀態 | 驅動的缺省值 |
defaultCatalog | 連接池中創建的連接默認的 catalog | - |
initialSize | 連接池啟動時創建的初始連接數量 | 0 |
maxTotal | 連接池同一時間可分配的最大活躍連接數;負數表示不限制 | 8 |
maxIdle | 可以在池中保持空閑的最大連接數,超出此值的空閑連接被釋放,負數表示不限制 | 8 |
minIdle | 可以在池中保持空閑的最小連接數,低於此值將創建空閑連接,若設置為 0,則不創建 | 0 |
maxWaitMillis | 最大等待時間(毫秒),如果在沒有連接可用的情況下等待超過此時間,則拋出異常;-1 表示無限期等待,直到獲取到連接為止 | - |
validationQuery | 在連接池返回連接給調用者前用來對連接進行驗證的查詢 SQL | - |
validationQueryTimeout | SQL 查詢驗證超時時間(秒) | - |
testOnCreate | 連接在創建之后是否進行驗證 | false |
testOnBorrow | 當從連接池中取出一個連接時是否進行驗證,若驗證失敗則從池中刪除該連接並嘗試取出另一個連接 | true |
testOnReturn | 當一個連接使用完歸還到連接池時是否進行驗證 | false |
testWhileIdle | 對池中空閑的連接是否進行驗證,驗證失敗則釋放此連接 | false |
timeBetweenEvictionRunsMillis | 在空閑連接回收器線程運行期間休眠時間(毫秒),如果設置為非正數,則不運行此線程 | -1 |
numTestsPerEvictionRun | 空閑連接回收器線程運行期間檢查連接的個數 | 3 |
minEvictableIdleTimeMillis | 連接在池中保持空閑而不被回收的最小時間(毫秒) | 1800000(30分鍾) |
removeAbandonedOnBorrow | 標記是否刪除泄露的連接,如果連接超出removeAbandonedTimeout的限制,且該屬性設置為 true,則連接被認為是被泄露並且可以被刪除 | false |
removeAbandonedTimeout | 泄露的連接可以被刪除的超時時間(秒),該值應設置為應用程序查詢可能執行的最長時間 | 300(5分鍾) |
poolPreparedStatements | 設置該連接池的預處理語句池是否生效 | false |
# src/main/resources/application.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
spring.jmx.enabled=false spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.dbcp2.default-auto-commit=true spring.datasource.dbcp2.initial-size=30 spring.datasource.dbcp2.max-total=120 spring.datasource.dbcp2.max-idle=120 spring.datasource.dbcp2.min-idle=30 spring.datasource.dbcp2.max-wait-millis=10000 spring.datasource.dbcp2.validation-query=SELECT 1 spring.datasource.dbcp2.validation-query-timeout=3 spring.datasource.dbcp2.test-on-borrow=true spring.datasource.dbcp2.test-while-idle=true spring.datasource.dbcp2.time-between-eviction-runs-millis=10000 spring.datasource.dbcp2.num-tests-per-eviction-run=10 spring.datasource.dbcp2.min-evictable-idle-time-millis=120000 spring.datasource.dbcp2.remove-abandoned-on-borrow=true spring.datasource.dbcp2.remove-abandoned-timeout=120 spring.datasource.dbcp2.pool-prepared-statements=true |
Spring Boot Data Jpa 依賴聲明:
# pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency> |