鏈接池的意義及阿里Druid

     創建數據庫鏈接是至關耗時和耗費資源的,並且一個數據庫服務器可以同時創建的鏈接數也是有限的,在大型的Web應用中,可能同時會有成百上千個訪問數據庫的請求,若是Web應用程序爲每個客戶請求分配一個數據庫鏈接,將致使性能的急劇降低。爲了可以重複利用數據庫鏈接,提升對請求的響應時間和服務器的性能,能夠採用鏈接池技術。鏈接池技術預先創建多個數據庫鏈接對象,而後將鏈接對象保存到鏈接池中,當客戶請求到來時,從池中取出一個鏈接對象爲客戶服務,當請求完成後,客戶程序調用close()方法,將鏈接對象放回池中。

     在普通的數據庫訪問程序中,客戶程序獲得的鏈接對象是物理鏈接,調用鏈接對象的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>



第二部分:詳講在普通項目中的配置。

文章簡介
Druid首先是一個數據庫鏈接池,但它不只僅是一個數據庫鏈接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個SQLParser。 Druid支持全部JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQLServer、H2等等。  
Druid針對Oracle和MySql作了特別優化,好比Oracle的PSCache內存佔用優化,MySql的ping檢測優化。 Druid在監控、可擴展性、穩定性和性能方面都有明顯的優點。Druid提供了Filter-Chain模式的擴展API,能夠本身編寫Filter攔截JDBC中的任何方法,能夠在上面作任何事情,好比說性能監控、SQL審計、用戶名密碼加密、日誌等等。

配置   
爲了方便你們遷移,Druid的配置和DBCP是基本一致的,若是你原來是使用DBCP,遷移是十分方便的,只須要把corg.apache.commons.dbcp.BasicDataSource修改成om.alibaba.druid.pool.DruidDataSource就行了。 
<beanid="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"> 
   <property name="url"value="${jdbc_url}" />
   <property name="username"value="${jdbc_user}" />
   <property name="password"value="${jdbc_password}" />
    
   <property name="filters"value="stat" />
 
   <property name="maxActive"value="20" />
   <property name="initialSize"value="1" />
   <property name="maxWait"value="60000" />
   <property name="minIdle"value="1" />
 
   <propertyname="timeBetweenEvictionRunsMillis" value="60000"/>
   <propertyname="minEvictableIdleTimeMillis" value="300000"/>
 
   <property name="validationQuery"value="SELECT 'x'" />
   <property name="testWhileIdle"value="true" />
   <property name="testOnBorrow"value="false" />
   <property name="testOnReturn"value="false" />
    
   <propertyname="poolPreparedStatements" value="true" />
   <propertyname="maxPoolPreparedStatementPerConnectionSize" value="50"/>
</bean>

在上面的配置中,一般你須要配置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

相關文章
相關標籤/搜索