1. 程式人生 > >(轉)阿裏巴巴Druid數據源及使用

(轉)阿裏巴巴Druid數據源及使用

dep 密碼配置 rec 應用 穩定性 dst 建立 tro servlet

原文鏈接:https://blog.csdn.net/yanguo110/article/details/68944659

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

目前常用的數據源主要有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執行。

(轉)阿裏巴巴Druid數據源及使用