Druid是阿里巴巴開源平臺上的一個項目,整個項目由數據庫鏈接池、插件框架和SQL解析器組成。該項目主要是爲了擴展JDBC的一些限制,可讓程序員實現一些特殊的需求,好比向密鑰服務請求憑證、統計SQL信息、SQL性能收集、SQL注入檢查、SQL翻譯等,程序員能夠經過定製來實現本身須要的功能。 java
該項目在阿里巴巴內部獲得了普遍的部署,在外部也有大量的用戶羣。爲了使你們更好地瞭解和使用Druid在此作一些簡單的介紹,以幫助你們快速入門。mysql
目前比較流行的數據源還有:c3p0,dbcp,proxool,BoneCP等。其中spring,hibernate都默認推薦使用c3p0,Tomcat默認使用dbcp。程序員
如下是本人鏈接mysql數據庫測試的性能:(本人水平有限,僅作參考,不一樣的數據庫,不一樣的環境可能存在較大差別)spring
連續操做1000次數據庫寫入操做的用時比較:sql
數據源數據庫 |
用時 msapp |
C3p0框架 |
3630maven |
proxool性能 |
3240 |
druid |
3190 |
dbcp |
3264 |
根據分析,druid性能超過其餘數據源,但在屢次運行過程是druid、proxool出現崩潰兩次。C3p0和dbcp在相對比較穩定。其中c3p0有自動回收鏈接功能,而dbcp沒有自動回收鏈接的功能。
好了,廢話少說,下面快速給你們使用druid配置數據鏈接:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true
username=root
password=1234
#最大鏈接數
maxActive=3
須要先聲明DruidDataSoure設置鏈接信息,其後再賦值給javax.sql.DataSource。完整代碼以下:
Properties prop = new Properties();
prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username =prop.getProperty("username");
String password = prop.getProperty("password");
String maxActive = prop.getProperty("maxActive");
//聲明DruidDataSource
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(maxActive));
相信小夥伴位,在建立DruidDataSource之後,以然已經會使用了吧。哈哈~
因爲在資源文件中,配置了數據庫明文密碼,爲了保護密碼,可使用Druid數據源密碼加密的功能。
執行如下命令:
C:/>java –cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools 密碼
上面的命令中,藍線部分爲隨機生成的publickey,每次隨機。紅線中的爲生成的密碼。
生成密碼的命令:java -cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools e234
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username=root
#通過加密之後的密碼
password=XSY9axcew83ZVNeZUmgrOPXwP0d3ZziFmqal4IZPAAJ4mpnwbouWiUaqD…
#最大鏈接數
maxActive=3
#生成的公鑰
publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANTxMV9TZYKpQCm7E+mEOhW0…
主要是添加publickey和通過加密的密碼,並指定過慮器:
//讀取資源文件
Properties prop = new Properties();
prop.load(DSUtils.class.getResourceAsStream("pwd.properties"));
String driver = prop.getProperty("driver");
String url = prop.getProperty("url");
String username =prop.getProperty("username");
String password = prop.getProperty("password");
String maxActive = prop.getProperty("maxActive");
String publickey = prop.getProperty("publickey");
//聲明DruidDataSource
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(maxActive));
//config:使用ConfigFilter解密,Stat:啓動監控功能StatFilter
ds.setFilters("config,stat");
//設置解密使用的publickey
ds.setConnectionProperties("config.decrypt=true;config.decrypt.key="+publickey);
配置Druid用於監控的Servlet以下:
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
運行監控的效果圖:
總結:
1:Druid數據源用維護鏈接對象是DruidDataSource 。
2:能夠經過ConfigTools對用戶的密碼進行加密。
3:能夠經過配置的方式,監控SQL執行。