連接池的意義及阿里Druid

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

     在普通的數據庫訪問程序中,客戶程序得到的連接對象是物理連接,調用連接對象的close()方法將關閉連接,而採用連接池技術,客戶程序得到的連接對象是連接池中物理連接的一個句柄,調用連接對象的close()方法,物理連接並沒有關閉,數據源的實現只是刪除了客戶程序中的連接對象和池中的連接對象之間的聯繫。

第一部分:數據源的集中比較。

目前常用的數據源主要有c3p0、dbcp、proxool、druid,先來說說他們
Spring 推薦使用dbcp;
Hibernate 推薦使用c3p0和proxool
1、 DBCP:apache
DBCP(DataBase connection pool)數據庫連接池。是apache上的一個 java連接池項目,也是 tomcat使用的連接池組件。單獨使用dbcp需要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar由於建立數據庫連接是一個非常耗時耗資源的行爲,所以通過連接池預先同數據庫建立一些連接,放在內存中,應用程序需要建立數據庫連接時直接到連接池中申請一個就行,用完後再放回去。dbcp沒有自動的去回收空閒連接的功能。

2、 C3P0:
C3P0是一個開源的jdbc連接池,它實現了數據源和jndi綁定,支持jdbc3規範和jdbc2的標準擴展。c3p0是異步操作的,緩慢的jdbc操作通過幫助進程完成。擴展這些操作可以有效的提升性能。目前使用它的開源項目有Hibernate,Spring等。c3p0有自動回收空閒連接功能。

3、 Proxool:Sourceforge
Proxool是一種Java數據庫連接池技術。是sourceforge下的一個開源項目,這個項目提供一個健壯、易用的連接池,最爲關鍵的是這個連接池提供監控的功能,方便易用,便於發現連接泄漏的情況。
綜合來說,穩定性是dbcp>=c3p0>proxool

後來阿里巴巴的druid開源了,可以是前無古人後無來者,最強沒有之一,是否的穩定,在大併發中表現十分好

今天來介紹的主要是監控,德魯伊提供的這個監控組件,非常的便利,截圖如下:

這是針對所有sql的監控,運行效率等等都能看到

對於url的監控,請求時間,併發等等,非常便利

當前數據源的配置信息也能夠看到

監控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.1、首先對密碼進行加密獲取一個publickey和加密後的密碼

執行以下命令:

 C:/>java –cp druid-1.0.18.jar com.alibaba.druid.filter.config.ConfigTools 密碼

上面的命令中,藍線部分爲隨機生成的publickey,每次隨機。紅線中的爲生成的密碼。

4.2、將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.3、修改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

          https://blog.csdn.net/u012868077/article/details/48134179


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章