ssm整合druid监控功能

905 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Druid内置提供一个StatFilter,用于统计监控信息。

StatFilter 配置

StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar/META-INF/druid-filter.properties。

image.png

在spring中使用别名配置方式如下:

    @Bean
    public DruidDataSource getDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        Properties properties = new Properties();
        try {
            //加载属性  自动读取类路径下配置文件
            properties.load(MyBatisConfig.class.getClassLoader().getResourceAsStream("db.properties"));
            //配置默认监控filter WallFilter:防止sql注入的过滤器 Slf4jFileter:日志记录JDBC执行的SQL
            druidDataSource.setFilters("stat,wall,slf4j");
            //开启慢sql监控,大于1000毫秒的为慢sql,默认是3秒
            druidDataSource.setConnectionProperties("druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //如果Properties文件的属性名命名符合configFromPropety的参数Properties的命名规则,则自动赋值
        druidDataSource.configFromPropety(properties);    //自动读取设置属性
        return druidDataSource;
    }

上面的配置中,StatFilter和WallFilter、SlfFilter组合使用。

  • WallFilter:防止sql注入的过滤器
  • Slf4jFileter:日志记录JDBC执行的SQL

使用Druid的内置监控页面

要访问druid的内置监控页面,需要配置一个servlet :

@WebServlet(urlPatterns = "/druid/*",initParams = {
        @WebInitParam(name = "loginUsername",value = "admin"),   //登录用户名
        @WebInitParam(name = "loginPassword",value = "123456"),   //登录密码
        @WebInitParam(name = "allow",value = ""),   //ip白名单,没有配置或空,则允许所有访问
        @WebInitParam(name = "deny",value = ""),    //ip黑名单
        @WebInitParam(name = "resetEnable",value = "false")  //禁用html页面的reset all功能
})
public class DruidStatueServlet extends StatViewServlet {
 
}

或者在spring配置类中:

    @Bean
    public ServletRegistrationBean druidServlet() {
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings(new String[]{"/druid/*"});        //IP白名单 (没有配置或者为空,则允许所有访问)
        reg.addInitParameter("allow", "");        //IP黑名单
        reg.addInitParameter("resetEnable", "false");        //是否能够重置数据
        reg.addInitParameter("loginUsername", "admin");//设置账号密码
        reg.addInitParameter("loginPassword", "123456");
        return reg;
    }

启动服务器,通过地址栏访问:ip:端口号/应用名/druid/login.html

image.png

设置web监控

WebStatFilter用于采集web-jdbc关联监控的数据

@WebFilter(filterName = "druidStatueFilter", urlPatterns = "/*",
        initParams = {
        @WebInitParam(name = "exclusions",value = "*.js,*.jpg,*.png,*.css,/druid/*"),   //添加需要忽略的格式信息
        @WebInitParam(name = "profileEnable",value = "true"),    //配置profileEnable能够监控单个url调用的sql列表
        @WebInitParam(name = "principalCookieName",value = "USER_COOKIE")
        })
public class DruidStatueFilter extends WebStatFilter {
 
}

或者在spring配置类中:

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        //添加过滤规则
        filterRegistrationBean.addUrlPatterns(new String[]{"/*"});
        //添加需要忽略的格式信息
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        //配置profileEnable能够监控单个url调用的sql列表
        filterRegistrationBean.addInitParameter("profileEnable", "true");
        //如果你的user信息保存在cookie中,你可以配置
        filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
        //principalCookieName,使得druid知道当前的user是谁  USER_COOKIE为cookie名
        //使得druid能够知道当前的session的用户是谁
        filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
        filterRegistrationBean.addInitParameter("DruidWebStatFilter", "/*");
        return filterRegistrationBean;
    }

设置spring监控

//设置druid 的 aop切面类
    @Bean(name = "druidStatInterceptor")
    public DruidStatInterceptor getDruidStatInterceptor() {
        return new DruidStatInterceptor();
    }
 
    //配置spring监控
    @Bean
    public BeanNameAutoProxyCreator getAutoProxyCreator() {
        BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
        beanNameAutoProxyCreator.setProxyTargetClass(true);
        beanNameAutoProxyCreator.setBeanNames(new String[]{"*Mapper", "*Service"});
        beanNameAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
        return beanNameAutoProxyCreator;
    }