简单搜索了一下,网上的连接池的监控大多数都是基于配置文件的。其实我自己思考了一下,基于配置文件的做法其实比较优雅,并且druid官方git上的介绍也是基于xml配置文件处理的。但是为了有更多选择,还是简单记录一下基于filter和servlet注解的druid监控配置。
首先是配置filter,实际就是利用Servlet 3.0的filter注解,配置一个filter。
package com.test.filter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import com.alibaba.druid.support.http.WebStatFilter;
@WebFilter(
filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
/** 忽略资源 */
@WebInitParam(name="exclusions", value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/static/*"),
@WebInitParam(name="profileEnable",value="true"),
/** 监控当前COOKIE的用户 */
@WebInitParam(name="principalCookieName",value="USER_COOKIE"),
/** 监控当前SESSION的用户 */
@WebInitParam(name="principalSessionName",value="USER_SESSION"),
/** 监控单个url访问数据库情况 */
@WebInitParam(name = "profileEnable",value = "true")
}
)
public class DruidStatFilter extends WebStatFilter {
}
接下来基于Servlet注解配置一个Servlet类
package com.xin.routdata.web;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import com.alibaba.druid.support.http.StatViewServlet;
@SuppressWarnings("serial")
@WebServlet(urlPatterns="/druid/*",
initParams={
/** 白名单,如果不配置或value为空,则允许所有 */
@WebInitParam(name="allow",value=""),
/** 黑名单,与白名单存在相同IP时,优先于白名单 */
@WebInitParam(name="deny",value=""),
/** 用户名 */
@WebInitParam(name="loginUsername",value="root"),
/** 密码 */
@WebInitParam(name="loginPassword",value="sunshine"),
/** 禁用HTML页面上的“Reset All”功能 */
@WebInitParam(name="resetEnable",value="false")
})
public class DruidStatViewServlet extends StatViewServlet {
}
实际我这边做的事情就是把web.xml中的配置,使用注解的形式在filter和servlet中又配置了一遍而已。
其实在一般的Spring项目中,基于web.xml配置简单有效,直接创建filter和servlet的场景,主要是面对一些敏捷开发的环境,直接使用servlet开发了功能,忽略web.xml配置时,使用手动添加servlet和filter来处理。