druid連線池使用記錄
按照https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 的順序來講
一、開啟SQL監控:
1.使用的spring的話,推薦在spring的配置檔案中配置StatFilter這個bean。
2.對於web-jdbc操作的監控,需要配置WebStatFilter這個攔截器,配置如下:
<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>
3.配置Druid的內建監控頁面
在web.xml註冊如下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>
二、配置spring與druid的關聯(監控spring中bean的方法執行的情況)
有三種配置方式,個人使用了第二種,使用aop方式的監控。配置如下:
<!--druid實現監控spring的aop配置-->
<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.EP.serviceImpl.*</value>
</list>
</property>
</bean>
<bean id="druidAndSpringAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="druid-stat-interceptor"/>
<property name="pointcut" ref="druid-stat-pointcut"/>
</bean>
使用官方文件的示例程式碼進行切點和方法的結合,IDE報無法識別的錯誤,故使用另外一種方式進行結合。
注:關於aspect與adivisor的一些區別:
1、Adivisor是一種特殊的Aspect,Advisor代表spring中的Aspect
2、區別:advisor只持有一個Pointcut和一個advice,而aspect可以多個pointcut和多個advice
三、配置web與druid的關聯(監控一些web url、session的使用情況等)
具體怎麼使用沒什麼坑,這裡就不當程式碼的搬運工了
讓druid與web和spring關聯之後,基本實現了對一個web應用的全方位檢測。下面用一些其它功能,也把用法和遇到的坑記錄下:
一、防止SQL注入攻擊
這段也沒什麼坑,配置的話,直接在官方文件上面貼上複製就可以,要提的一點是:我個人所有的filter都是使用自定義的,沒有使用的預設的filter。
二、應對連線洩露
白話定義:一些不能被關閉也不能被引用的資料庫連線
沒什麼可寫的=.=
官方文件還提到了另外一個檢視記憶體是否洩露的方法(其實我想到了。。。。):
在內建監控頁面weburi-detail.html中,檢視JdbcPoolConnectionOpenCount和JdbcPoolConnectionCloseCount屬性,如果不相等,就是洩漏了。
(就是開啟數是否等於關閉數)
其它的也沒什麼了,有的就再補充了~