天天看點

Druid(資料庫連接配接池)

介紹:Druid是阿裡推出的,強烈建議在WEB項目之中使用Druid,因為可以配置監控,但是如果不需要監控,任何的項目都可以使用Druid。

1.要想使用druid資料庫連接配接池,首先要引入相應的依賴庫

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.17</version>
</dependency>
           

2.使用druid的資料庫連接配接,首先要修改database.properties配置檔案

# 定義資料庫驅動程式名稱
db.druid.driverClassName=org.gjt.mm.mysql.Driver
# 資料庫連接配接位址
db.druid.url=jdbc:mysql://localhost:3306/yootk
# 資料庫連接配接使用者名
db.druid.username=root
# 資料庫連接配接密碼
db.druid.password=mysqladmin
# 資料庫最大連接配接數
db.druid.maxActive=1
# 資料庫最小維持連接配接數
db.druid.minIdle=1
# 資料庫初始化連接配接
db.druid.initialSize=1
# 資料庫連接配接池最大等待時間
db.druid.maxWait=30000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒
db.druid.timeBetweenEvictionRunsMillis=60000
# 配置一個連接配接在池中最小生存的時間,機關是毫秒
db.druid.minEvictableIdleTimeMillis=300000
# 檢測查詢處理
db.druid.validationQuery=SELECT 'x'
# 申請連接配接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接配接是否有效。
db.druid.testWhileIdle=true
# 申請連接配接時執行validationQuery檢測連接配接是否有效,做了這個配置會降低性能
db.druid.testOnBorrow=false
# 歸還連接配接時執行validationQuery檢測連接配接是否有效,做了這個配置會降低性能
db.druid.testOnReturn=false
是否緩存preparedStatement,也就是PSCache。PSCache對支援遊标的資料庫性能提升巨大,比如說oracle。在mysql下建議關閉
db.druid.poolPreparedStatements=false
# 要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用記憶體過多的問題,可以把這個數值配置大一些,比如說100 
db.druid.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用于防火牆
db.druid.filters=stat
           

3.修改spring-datasource.xml配置檔案,使用Druid的連接配接池進行管理。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
        <property name="driverClassName" value="${db.druid.driverClassName}"/>	<!-- 定義資料庫驅動程式 -->
        <property name="url" value="${db.druid.url}"/>	<!-- 資料庫連接配接位址 -->
        <property name="username" value="${db.druid.username}"/>		<!-- 資料庫連接配接使用者名 -->
        <property name="password" value="${db.druid.password}"/>	<!-- 資料庫連接配接密碼 -->
        <property name="maxActive" value="${db.druid.maxActive}"/>	<!-- 最大連接配接數 -->
        <property name="minIdle" value="${db.druid.minIdle}"/>	<!-- 最小連接配接池 -->
        <property name="initialSize" value="${db.druid.initialSize}"/>	<!-- 初始化連接配接大小 -->
        <property name="maxWait" value="${db.druid.maxWait}"/>	<!-- 最大等待時間 -->
        <property name="timeBetweenEvictionRunsMillis" value="${db.druid.timeBetweenEvictionRunsMillis}" />  <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${db.druid.minEvictableIdleTimeMillis}" /> <!-- 配置一個連接配接在池中最小生存的時間,機關是毫秒 -->
        <property name="validationQuery" value="${db.druid.validationQuery}" />  <!-- 驗證SQL -->
        <!-- 建議配置為true,不影響性能,并且保證安全性。 -->
        <!-- 申請連接配接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接配接是否有效。 -->
        <property name="testWhileIdle" value="${db.druid.testWhileIdle}" />
        <property name="testOnBorrow" value="${db.druid.testOnBorrow}" />	<!-- 申請連接配接時執行validationQuery檢測連接配接是否有效,做了這個配置會降低性能 -->
        <property name="testOnReturn" value="${db.druid.testOnReturn}" /> 	<!-- 歸還連接配接時執行validationQuery檢測連接配接是否有效,做了這個配置會降低性能 -->
        <!-- 是否緩存preparedStatement,也就是PSCache。PSCache對支援遊标的資料庫性能提升巨大,比如說oracle。在mysql下建議關閉。 -->
        <property name="poolPreparedStatements" value="${db.druid.poolPreparedStatements}" />
        <!-- 要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用記憶體過多的問題,可以把這個數值配置大一些,比如說100 -->
        <property name="maxPoolPreparedStatementPerConnectionSize" value="${db.druid.maxPoolPreparedStatementPerConnectionSize}" />
        <property name="filters" value="${db.druid.filters}" /> <!-- 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用于防火牆 -->
    </bean>
</beans>
           

4.對于目前的程式代碼隻是在Java程式下運作,是以目前的配置已經可以保證程式提供有資料庫連接配接的支援了。

5.但是之是以使用Druid還有一個很大的因素在于,其可以實作資料庫通路的性能監控,要想實作監控就要往下繼續配置。這種性能監控主要是通過過濾器的形式配置的,再追加Servlet的啟動,修改web.xml配置檔案。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 1、SpringMVC本身是運作在Spring容器之中,是以需要定義一個Spring容器的基本配置檔案路徑 -->
    <context-param> <!-- 配置全局的初始化參數,這個參數依靠ServletContext.getInitParameter()擷取 -->
        <param-name>contextConfigLocation</param-name>  <!-- 屬性标準名稱 -->
        <!-- 所有的Spring配置檔案隻允許加載一次,不要重複加載 -->
        <param-value>classpath:spring/spring-base.xml</param-value>
    </context-param>
    <!-- 2、通過WEB容器啟動的時候實作Spring容器的啟動操作 -->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <!-- 3、配置SpringMVC的分發處理Servlet,利用此Servlet找到所有的Action -->
    <servlet>
        <servlet-name>SpringMVCServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <!-- 此時配置的是SpringMVC的啟動檔案,該配置檔案不要重複的加載 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVCServlet</servlet-name>
        <url-pattern>*.action</url-pattern> <!-- 設定通路處理路徑 -->
        <url-pattern>/</url-pattern><!-- 靜态資源映射 -->
    </servlet-mapping>
  <!--如果想啟動Druid監控,則一定要有一個監控界面的啟動Servlet,是以要在此追加一個新的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>
    <!-- 4、配置項目中的編碼過濾器 -->
    <filter>
        <filter-name>EncodingFitler</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFitler</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 <!--下面紅色字型部分是性能監控的配置-->
    <filter>
        <filter-name>DruidWebStatFilter</filter-name>
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
        <init-param>
            <param-name>exclusions</param-name>
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>DruidWebStatFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
           

6.啟動WEB項目,同時在浏覽器中輸入如下位址:http://localhost/druid/index.html

現在對于開發者執行的每一條SQL語句都會進行自動的監控,這樣就可以清楚的知道目前系統中資料庫連接配接池的狀态。

轉載于:https://www.cnblogs.com/wxl123/p/11111591.html