DruidDataSource详解部分(一)
資源復用是系統性能優化中的一種常用手段,如單例,數據庫連接池,線程池等都是資源復用的常用技巧。 數據庫連接池的基本原理是在內部對象池中維護一定數量的數據庫連接,并對外暴露數據庫連接獲取和返回方法
和dbcp類似,druid的配置項如下
?
DruidDataSource配置
// properties settingMap<String, String> conf = new HashedMap();conf.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.jdbc.Driver");conf.put(DruidDataSourceFactory.PROP_URL, url);conf.put(DruidDataSourceFactory.PROP_USERNAME, source.getUserName());if (StringUtils.isNotBlank(source.getUserPwd())) {conf.put(DruidDataSourceFactory.PROP_PASSWORD, source.getUserPwd());}// 配置初始化大小、最小、最大conf.put(DruidDataSourceFactory.PROP_INITIALSIZE, source.getInitialSize() + "");conf.put(DruidDataSourceFactory.PROP_MINIDLE, source.getMinIdle()+ "");conf.put(DruidDataSourceFactory.PROP_MAXACTIVE, source.getMaxActive()+ "");DruidDataSource druidDS = (DruidDataSource) DruidDataSourceFactory.createDataSource(conf);druidDS.setBreakAfterAcquireFailure(true);/** 是否緩存preparedStatement,也就是PSCache。 PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql5.5以下的版本中沒有PSCache功能,建議關閉掉。作者在5.5版本中使用PSCache,通過監控界面發現PSCache有緩存命中率記錄,該應該是支持PSCache*/druidDS.setPoolPreparedStatements(true);/**setTimeBetweenEvictionRunsMillis:有兩個含義:1) Destroy線程會檢測連接的間隔時間2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明setTestWhileIdle:建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。*/druidDS.setTestWhileIdle(true);druidDS.setTimeBetweenEvictionRunsMillis(60000);druidDS.setConnectionErrorRetryAttempts(APIConstant.DATA_API_JDBC_CONNECTION_RETRY_COUNT);// 連接泄漏監測druidDS.setRemoveAbandoned(true);// 是否在自動回收超時連接的時候打印連接的超時錯誤druidDS.setLogAbandoned(true);// 30s=>0.5m ,1800s =>30m, 3600s =>1h,設置8小時有效druidDS.setRemoveAbandonedTimeout(3600 * 8 * 24);// 配置獲取連接等待超時的時間druidDS.setMaxWait(2000);// 單位秒,檢測連接是否有效的超時時間。底層調用jdbc Statement對象的void setQueryTimeout(int seconds)方法druidDS.setValidationQueryTimeout(source.getValidationQueryTimeout());// 防止過期druidDS.setValidationQuery("SELECT 'x'");druidDS.setTestWhileIdle(true);druidDS.setTestOnBorrow(true);// 初始化druidDS.init();filters:屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:監控統計
用的filter:stat日志用的filter:log4j,防御sql注入的filter:wall
initialSize:初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一
次getConnection時
maxActive:最大連接池數量
minIdle:最小連接池數量
maxWait:獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖
poolPreparedStatements: 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql下建議關閉。
validationQuery:用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用
validationQueryTimeout:單位秒,檢測連接是否有效的超時時間。底層調用jdbc Statement對象的void setQueryTimeout(int seconds)方法
testOnBorrow: 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會 降低性能。
testOnReturn:歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降 低性能。
testWhileIdle:建議配置為true,不影響性能,并且保證安全性。指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除. 。
numTestsPerEvictionRun:不再使用,一個DruidDataSource只支持一個EvictionRun
minEvictableIdleTimeMillis:連接保持空閑而不被驅逐的最長時間
connectionInitSqls:物理連接初始化的時候執行的sql
exceptionSorter:當數據庫拋出一些不可恢復的異常時,拋棄連接
removeAbandoned:是否啟用連接泄露檢測
removeAbandonedTimeout:連接泄露,連接超過指定時間未關閉,就會被強行回收
logAbandoned:關閉abanded連接時輸出錯誤日志
鏈接:https://www.jianshu.com/p/6e8e1ae6f02b
?
總結
以上是生活随笔為你收集整理的DruidDataSource详解部分(一)的全部內容,希望文章能夠幫你解決所遇到的問題。