1. 程式人生 > >引入阿里Druid資料庫連線池(maven ssm框架)

引入阿里Druid資料庫連線池(maven ssm框架)

Druid

Druid是阿里巴巴開源平臺上的一個專案,整個專案由資料庫連線池、外掛框架和SQL解析器組成。該專案主要是為了擴充套件JDBC的一些限制,可以讓程式設計師實現一些特殊的需求,比如向金鑰服務請求憑證、統計SQL資訊、SQL效能收集、SQL注入檢查、SQL翻譯等,程式設計師可以通過定製來實現自己需要的功能。

Maven引入jar包

        <dependency>  
                <groupId>com.alibaba</groupId>  
                <artifactId>
druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.8</version>
</dependency>

配置資料庫連線池

在ApplicationContext.xml檔案中新增下列配置
配置資料庫

<!-- 宣告屬性檔案 -->
    <context:property-placeholder location="classpath:mysql.properties" />
    <!-- 阿里 druid 資料庫連線池 -->  
    <bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource
" destroy-method = "close" >
<!-- 資料庫基本資訊配置 --> <property name = "url" value = "jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.dbname}?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" /> <property name = "username" value = "${mysql.username}" /> <property name = "password" value = "${mysql.password}" /> <property name = "driverClassName" value = "${driverClassName}" /> <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}" /> <!-- 開啟 removeAbandoned 功能 --> <property name = "removeAbandoned" value = "${removeAbandoned}" /> <!-- 1800 秒,也就是 30 分鐘 --> <property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" /> <!-- 關閉 abanded 連線時輸出錯誤日誌 --> <property name = "logAbandoned" value = "${logAbandoned}" /> <property name="proxyFilters"> <list> <ref bean="wall-filter"/> <ref bean="stat-filter"/> <ref bean="log-filter"/> </list> </property> </bean> <!-- 慢SQL記錄 --> <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter"> <!-- 慢sql時間設定,即執行時間大於200毫秒的都是慢sql --> <property name="slowSqlMillis" value="2000"/> <property name="logSlowSql" value="true"/> </bean> <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter"> <property name="dataSourceLogEnabled" value="true" /> <property name="statementExecutableSqlLogEnable" value="true" /> </bean> <!-- 防禦SQL攻擊 --> <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter"> <property name="config" ref="wall-config" /> <property name="logViolation" value="true" /> <!-- <property name="throwException" value="false" /> --> </bean> <bean id="wall-config" class="com.alibaba.druid.wall.WallConfig"> <property name="deleteAllow" value="false" /> <property name="truncateAllow" value="false" /> <property name="dropTableAllow" value="false" /> <property name="alterTableAllow" value="false" /> <property name="deleteWhereNoneCheck" value="false" /> <property name="updateWhereNoneCheck" value="false" /> </bean> <!-- druid spring監控 start --> <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"> </bean> <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"> <property name="patterns"> <list> <value>com.dekscom.db.dao.*</value> </list> </property> </bean> <!-- 建立基於類的代理 --> <aop:config proxy-target-class="true"> <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" /> </aop:config> <!-- druid spring監控 end -->

mysql.properties屬性檔案

mysql.host=localhost
mysql.port=3306
mysql.dbname=mysqldb
mysql.username=root
mysql.password=root
driverClassName: com.mysql.jdbc.Driver  
filters: wall,stat  
maxActive: 20  
initialSize: 3  
maxWait: 5000  
minIdle: 3  
maxIdle: 15  
timeBetweenEvictionRunsMillis: 60000  
minEvictableIdleTimeMillis: 300000  
validationQuery: SELECT 'x'  
testWhileIdle: true  
testOnBorrow: false  
testOnReturn: false  
maxOpenPreparedStatements: 20  
removeAbandoned: true  
removeAbandonedTimeout: 1800  
logAbandoned: true 

在web.xml檔案中新增下列配置

<!-- 連線池 啟用 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>  
             <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>  
        <init-param>  
        <!-- 使用者名稱 -->  
            <param-name>loginUsername</param-name>  
            <param-value>druid</param-value>  
        </init-param>  
        <init-param>  
        <!-- 密碼 -->  
        <param-name>loginPassword</param-name>  
        <param-value>druid</param-value>  
     </init-param>
      </servlet>  
      <servlet-mapping>  
         <servlet-name>DruidStatView</servlet-name>  
         <url-pattern>/druid/*</url-pattern>  
      </servlet-mapping>  
      <!-- 連線池 啟用 Web 監控統計功能    end--> 

首頁
這裡寫圖片描述

web監控
這裡寫圖片描述

spring監控
這裡寫圖片描述