引入阿里Druid資料庫連線池(maven ssm框架)
阿新 • • 發佈:2019-01-31
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&characterEncoding=UTF-8&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監控