ssm整合druid监控功能
Druid内置提供一个StatFilter,用于统计监控信息。
StatFilter 配置
StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar/META-INF/druid-filter.properties。
在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
设置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; }
作者:法外狂徒张三三
链接:https://juejin.cn/post/7021910167985848333