idea配置阿里Druid資料連線池在SSM框架中使用
阿里Druid資料連線池在SSM框架中的配置使用
一、Druid資料連線池簡介
Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。
效能好,同時自帶監控頁面,可以實時監控應用的連線池情況以及其中效能差的sql,方便我們找出應用中連線池方面的問題。
Druid是一個JDBC元件,它包括三部分:
1.DruidDriver 代理Driver,能夠提供基於Filter-Chain模式的外掛體系
2.DruidDataSource 高效可管理的資料庫連線池
3.SQLParser
二、Druid可以做什麼
1.可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統。
2.計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。
替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。
3.資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。
4.SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。
三、Druid配置
1.匯入jar包
2.編寫資料庫連線的資原始檔:dbconfig.properties
url:jdbc:mysql://localhost:3306/flm?useUnicode=true&characterEncoding=utf8 driverClassName:com.mysql.jdbc.Driver username:root password:root #------------------------------------------------------------------------------------------ #配置擴充套件外掛 監控統計用filters:stat 日誌用filters:log4j 防禦sql注入用filters:wall filters:stat #最大連線池數量 初始化建立物理連線的個數 獲取連線時最長的等待時間 最小連線池數量 maxIdle已經棄用 maxActive:20 initialSize:1 maxWait:60000 minIdle:10 maxIdle:15 #有兩個含義 1.Destroy 執行緒會檢測連線的時間 2.testWhileIdle的判斷依據 timeBetweenEvictionRunsMillis:60000 #Destory執行緒中如果檢測到當前連線的最後活躍時間和當前時間的差值大於minEvictableIdleTimeMillis,則關閉當前連線 minEvictableIdleTimeMillis:300000 #用來檢測連線是否的sql,要求是一個查詢語句。在mysql中通常設定為SELECT 'X' validationQuery:SELECT 'x' #申請連線的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery連線是否有效 testWhileIdle:true #申請連線時執行validationQuery檢測連線是否有效 這個配置會降低效能 testOnBorrow:false #歸還連線時執行validationQuery檢測連線是否有效 這個配置會降低效能 testOnReturn:false #要啟用PSCache,必須配置大於0,當大於0時,poolPreparedStatements自動觸發修改為true maxOpenPreparedStatements:20 #對於建立連線超過removeAbandonedTimeout的連線強制關閉 removeAbandoned:true #指定連線建立多長就被強制關閉 removeAbandonedTimeout:1800 #指定發生removeabandoned時,是否記錄當前執行緒的堆疊資訊到日誌中 logAbandoned:true
3.在spring-mybatis.xml中配置阿里資料連線池Druid
<!-- 阿里 druid資料庫連線池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- 資料庫基本資訊配置 --> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <property name="driverClassName" value="${driverClassName}" /> <!-- 配置監控統計攔截的filters,去掉後監控介面sql無法統計 --> <property name="filters" value="${filters}" /> <!-- 最大併發連線數 --> <property name="maxActive" value="${maxActive}" /> <!-- 初始化連線數量 --> <property name="initialSize" value="${initialSize}" /> <!-- 配置獲取連線等待超時的時間 --> <property name="maxWait" value="${maxWait}" /> <!-- 最小空閒連線數 --> <property name="minIdle" value="${minIdle}" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> <!-- 配置一個連線在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /> <property name="validationQuery" value="${validationQuery}" /> <property name="testWhileIdle" value="${testWhileIdle}" /> <property name="testOnBorrow" value="${testOnBorrow}" /> <property name="testOnReturn" value="${testOnReturn}" /> <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" /> <!-- 超過時間限制是否回收 --> <property name="removeAbandoned" value="${removeAbandoned}" /> <!-- 1800秒,也就是30分鐘 --> <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" /> <!-- 關閉abanded連線時輸出錯誤日誌 --> <property name="logAbandoned" value="${logAbandoned}" /> <!-- 開啟PSCache,並且指定每個連線上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> </bean>
4.在spring.xml配置中引入載入資原始檔進來
<?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">
<!--1. 引入外部properties檔案 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:dbconfig.properties</value>
</list>
</property>
</bean>
<import resource="spring-mybatis.xml"/>
</beans>
5.在web.xml啟用Web監控統計功能
<!-- 連線池 啟用Web監控統計功能 start-->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name> <!-- 經常需要排除一些不必要的url -->
<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>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><!-- 這個StatViewServlet的用途包括:提供監控資訊展示的html頁面;提供監控資訊的JSON API -->
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- 連線池 啟用Web監控統計功能 end-->
6.訪問監控頁面
啟動tomcate,輸入埠號/專案名稱/druid/index.html
如圖所示:
以上的操作完成了,請多多指教~