Druid连接池默认配置和坑
生活随笔
收集整理的這篇文章主要介紹了
Druid连接池默认配置和坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、公司默認配置
ds_0: !!com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://{host}:{port}/{schema}
username: username
password: password
connectionProperties: config.decrypt=true
filters: mergeStat,config,slf4j
initialSize: 1
maxActive: 20
minIdle: 1
maxWait: 6000
validationQuery: SELECT 1 FROM DUAL
testOnBorrow: false
testOnReturn: false
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 25200000
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
logAbandoned: true
removeAbandoned: true
removeAbandonedTimeout: 1800
removeAbandonedTimeoutMillis: 1800000
二、網上推薦配置
參考:https://www.jianshu.com/p/e75d73129f51
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 基本屬性 url、user、password -->
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="5" />
<property name="minIdle" value="5" />
<property name="maxActive" value="10" />
<!-- 配置從連接池獲取連接等待超時的時間 -->
<property name="maxWait" value="10000" />
<!-- 配置間隔多久啟動一次DestroyThread,對連接池內的連接才進行一次檢測,單位是毫秒。
檢測時:1.如果連接空閑并且超過minIdle以外的連接,如果空閑時間超過minEvictableIdleTimeMillis設置的值則直接物理關閉。2.在minIdle以內的不處理。
-->
<property name="timeBetweenEvictionRunsMillis" value="600000" />
<!-- 配置一個連接在池中最大空閑時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 設置從連接池獲取連接時是否檢查連接有效性,true時,每次都檢查;false時,不檢查 -->
<property name="testOnBorrow" value="false" />
<!-- 設置往連接池歸還連接時是否檢查連接有效性,true時,每次都檢查;false時,不檢查 -->
<property name="testOnReturn" value="false" />
<!-- 設置從連接池獲取連接時是否檢查連接有效性,true時,如果連接空閑時間超過minEvictableIdleTimeMillis進行檢查,否則不檢查;false時,不檢查 -->
<property name="testWhileIdle" value="true" />
<!-- 檢驗連接是否有效的查詢語句。如果數據庫Driver支持ping()方法,則優先使用ping()方法進行檢查,否則使用validationQuery查詢進行檢查。(Oracle jdbc Driver目前不支持ping方法) -->
<property name="validationQuery" value="select 1 from dual" />
<!-- 單位:秒,檢測連接是否有效的超時時間。底層調用jdbc Statement對象的void setQueryTimeout(int seconds)方法 -->
<!-- <property name="validationQueryTimeout" value="1" /> -->
<!-- 打開后,增強timeBetweenEvictionRunsMillis的周期性連接檢查,minIdle內的空閑連接,每次檢查強制驗證連接有效性. 參考:https://github.com/alibaba/druid/wiki/KeepAlive_cn -->
<property name="keepAlive" value="true" />
<!-- 連接泄露檢查,打開removeAbandoned功能 , 連接從連接池借出后,長時間不歸還,將觸發強制回連接?;厥罩芷陔StimeBetweenEvictionRunsMillis進行,如果連接為從連接池借出狀態,并且未執行任何sql,并且從借出時間起已超過removeAbandonedTimeout時間,則強制歸還連接到連接池中。 -->
<property name="removeAbandoned" value="true" />
<!-- 超時時間,秒 -->
<property name="removeAbandonedTimeout" value="80"/>
<!-- 關閉abanded連接時輸出錯誤日志,這樣出現連接泄露時可以通過錯誤日志定位忘記關閉連接的位置 -->
<property name="logAbandoned" value="true" />
<!-- 根據自身業務及事務大小來設置 -->
<property name="connectionProperties"
value="oracle.net.CONNECT_TIMEOUT=2000;oracle.jdbc.ReadTimeout=10000"></property>
<!-- 打開PSCache,并且指定每個連接上PSCache的大小,Oracle等支持游標的數據庫,打開此開關,會以數量級提升性能,具體查閱PSCache相關資料 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
<!-- 配置監控統計攔截的filters -->
<!-- <property name="filters" value="stat,slf4j" /> -->
<property name="proxyFilters">
<list>
<ref bean="log-filter" />
<ref bean="stat-filter" />
</list>
</property>
<!-- 配置監控統計日志的輸出間隔,單位毫秒,每次輸出所有統計數據會重置,酌情開啟 -->
<property name="timeBetweenLogStatsMillis" value="120000" />
</bean>
三、關于testOnBorrow=false的解析
DBCP連接池TestOnBorrow的坑
數據連接池默認配置帶來的坑testOnBorrow=false,cloes_wait 終于解決了
總結
以上是生活随笔為你收集整理的Druid连接池默认配置和坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git学习系列之Windows上安装Gi
- 下一篇: 中国光纤量子密钥分发突破1000公里!成