在普通的數據庫訪問程序中,客戶程序獲得的鏈接對象是物理鏈接,調用鏈接對象的close()方法將關閉鏈接,而採用鏈接池技術,客戶程序獲得的鏈接對象是鏈接池中物理鏈接的一個句柄,調用鏈接對象的close()方法,物理鏈接並無關閉,數據源的實現只是刪除了客戶程序中的鏈接對象和池中的鏈接對象之間的聯繫。css
第一部分:數據源的集中比較。
html
目前經常使用的數據源主要有c3p0、dbcp、proxool、druid,先來講說他們
Spring 推薦使用dbcp;
Hibernate 推薦使用c3p0和proxool
一、 DBCP:apache
DBCP(DataBase connection pool)數據庫鏈接池。是apache上的一個 java鏈接池項目,也是 tomcat使用的鏈接池組件。單獨使用dbcp須要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar因爲創建數據庫鏈接是一個很是耗時耗資源的行爲,因此經過鏈接池預先同數據庫創建一些鏈接,放在內存中,應用程序須要創建數據庫鏈接時直接到鏈接池中申請一個就行,用完後再放回去。dbcp沒有自動的去回收空閒鏈接的功能。java
二、 C3P0:
C3P0是一個開源的jdbc鏈接池,它實現了數據源和jndi綁定,支持jdbc3規範和jdbc2的標準擴展。c3p0是異步操做的,緩慢的jdbc操做經過幫助進程完成。擴展這些操做能夠有效的提高性能。目前使用它的開源項目有Hibernate,Spring等。c3p0有自動回收空閒鏈接功能。mysql
三、 Proxool:Sourceforge
Proxool是一種Java數據庫鏈接池技術。是sourceforge下的一個開源項目,這個項目提供一個健壯、易用的鏈接池,最爲關鍵的是這個鏈接池提供監控的功能,方便易用,便於發現鏈接泄漏的狀況。
綜合來講,穩定性是dbcp>=c3p0>proxoolsql
後來阿里巴巴的druid開源了,能夠是前無古人後無來者,最強沒有之一,是否的穩定,在大併發中表現十分好數據庫
今天來介紹的主要是監控,德魯伊提供的這個監控組件,很是的便利,截圖以下:apache
這是針對全部sql的監控,運行效率等等都能看到tomcat
對於url的監控,請求時間,併發等等,很是便利服務器
當前數據源的配置信息也可以看到session
監控session,這是我當前登陸的
總的來講,這個數據源仍是不錯的,很是推薦,現在也已經到了1.0.23版本
<!-- 鏈接池 阿里巴巴數據源 全世界最牛逼的data source 沒有之一 --> <druid.version>1.0.23</druid.version> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency>
在上面的配置中,一般你須要配置url、username、password,maxActive這三項。
第三部分druid的使用
1:添加maven依賴
<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>
2:添加一個資源配置文件(建議)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///wangjian?characterEncoding=UTF-8&autoReconnect=true
username=root
password=1234
#最大鏈接數
maxActive=3
3:建立工廠類讀取資源文件並建立javax.sql.DataSource的實例
須要先聲明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之後,以然已經會使用了吧。哈哈~
4:對密碼進行加密之後再保存到資源文件中並配置
因爲在資源文件中,配置了數據庫明文密碼,爲了保護密碼,可使用Druid數據源密碼加密的功能。
4.一、首先對密碼進行加密獲取一個publickey和加密後的密碼
執行如下命令:
C:/>java –cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools 密碼
上面的命令中,藍線部分爲隨機生成的publickey,每次隨機。紅線中的爲生成的密碼。
4.二、將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…
4.三、修改DruidDataSource實例化過程以下
主要是添加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);
5:配置監功能查看Druid數據源的監控信息
配置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執行。
轉載:https://blog.csdn.net/yanguo110/article/details/68944659