介紹: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語句都會進行自動的監控,這樣就可以清楚的知道當前系統中數據庫連接池的狀態。