druid mysql配置详解_druid配置详解
java程序很大一部分要操作數(shù)據(jù)庫,為了提高性能操作數(shù)據(jù)庫的時候,又不得不使用數(shù)據(jù)庫連接池。數(shù)據(jù)庫連接池有很多選擇,c3p、dhcp、proxool等,druid作為一名后起之秀,憑借其出色的性能,也逐漸印入了大家的眼簾。接下來本教程就說一下druid的簡單使用。
和dbcp類似,druid的配置項(xiàng)如下
配置
缺省值
說明
name
配置這個屬性的意義在于,如果存在多個數(shù)據(jù)源,監(jiān)控的時候
可以通過名字來區(qū)分開來。如果沒有配置,將會生成一個名字,
格式是:"DataSource-" + System.identityHashCode(this)
jdbcUrl
連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣。例如:
MYSQL :? ? jdbc:mysql://10.20.153.104:3306/druid2
ORACLE :? ?jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username
連接數(shù)據(jù)庫的用戶名
driverClassName
根據(jù)url自動識別
這一項(xiàng)可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName
initialSize
0
初始化時建立物理連接的個數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時
maxActive
8
最大連接池?cái)?shù)量
maxIdle
8
已經(jīng)不再使用,配置了也沒效果
minIdle
最小連接池?cái)?shù)量
maxWait
獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,
缺省啟用公平鎖,并發(fā)效率會有所下降,
如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatements
false
是否緩存preparedStatement,也就是PSCache。
PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。
在mysql5.5以下的版本中沒有PSCache功能,建議關(guān)閉掉。
作者在5.5版本中使用PSCache,通過監(jiān)控界面發(fā)現(xiàn)PSCache有緩存命中率記錄,
該應(yīng)該是支持PSCache。
maxOpenPreparedStatements
-1
要啟用PSCache,必須配置大于0,當(dāng)大于0時,
poolPreparedStatements自動觸發(fā)修改為true。
在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,
可以把這個數(shù)值配置大一些,比如說100
validationQuery
用來檢測連接是否有效的sql,要求是一個查詢語句。
如果validationQuery為null,testOnBorrow、testOnReturn、
testWhileIdle都不會其作用。
testOnBorrow
true
申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testOnReturn
false
歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能
testWhileIdle
false
建議配置為true,不影響性能,并且保證安全性。
申請連接的時候檢測,如果空閑時間大于
timeBetweenEvictionRunsMillis,
執(zhí)行validationQuery檢測連接是否有效。
timeBetweenEvictionRunsMillis
有兩個含義:
1) Destroy線程會檢測連接的間隔時間
2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明
numTestsPerEvictionRun
不再使用,一個DruidDataSource只支持一個EvictionRun
minEvictableIdleTimeMillis
connectionInitSqls
物理連接初始化的時候執(zhí)行的sql
exceptionSorter
根據(jù)dbType自動識別
當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接
filters
屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,
常用的插件有:
監(jiān)控統(tǒng)計(jì)用的filter:stat
日志用的filter:log4j
防御sql注入的filter:wall
proxyFilters
類型是List,
如果同時配置了filters和proxyFilters,
是組合關(guān)系,并非替換關(guān)系
加入?druid-1.0.9.jar
ApplicationContext.xml
/WEB-INF/classes/dbconfig.properties
dbconfig.properties
url: jdbc:mysql://localhost:3306/newm
driverClassName: com.mysql.jdbc.Driver
username: root
password: root
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 10
maxIdle: 15
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
maxOpenPreparedStatements: 20
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true
web.xml
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*. js ,*. gif ,*. jpg ,*. png ,*. css ,*. ico ,/ druid /*
DruidWebStatFilter
/*
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
DruidStatView
/ druid /*
訪問監(jiān)控頁面:?http://ip:port/projectName/druid/index.html
Java代碼:
importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.io.InputStream;importjava.sql.Connection;importjava.util.Properties;public classdemo {public static void main(String[] args) throwsException {
InputStream resourceAsStream=demo.class.getClassLoader().getResourceAsStream("dbconfig.properties");
Properties pp= newProperties();
pp.load(resourceAsStream);//創(chuàng)建連接池,使用配置文件中的參數(shù)
DataSource ds =DruidDataSourceFactory.createDataSource(pp);for (int i = 0; i < 21; i++) {//從連接池中取出連接
Connection conn =ds.getConnection();
System.out.println(conn);
}//最大連接數(shù)設(shè)置為20,此時獲取十一個connection 第21個等待三秒會報(bào)錯!!!!!
}
}
總結(jié)
以上是生活随笔為你收集整理的druid mysql配置详解_druid配置详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卡沙拉帝集成灶如何开烤箱门?
- 下一篇: mysql 5.8 新特性_MySQL