今天想和大家聊一聊Druid中的监控功能。相信很多朋友都用过Druid数据库连接池。个人感觉Druid是阿里比较成功的一个开源项目。与Fastjson有那么多硬伤不同,Druid一直都是各方面都非常优秀,功能齐全,使用方便。基本使用话不多说,今天我们就来看看Druid中的监控功能。一、准备工作首先我们来创建一个SpringBoot项目,导入MyBatis等,如下:选择MyBatis和MySQL驱动,做一个简单的测试用例。我们先连接数据库:spring.datasource.username=rootspring.datasource.password=123spring.datasource.url=jdbc:mysql:///test05?serverTimezone=Asia/Shanghai创建一个User实体类,做一个简单的查询案例,如下:publicclassUser{privateIntegerid;私有字符串用户名;私有字符串地址;私有字符串密码;私人字符串电子邮件;//省略getter/setter}@MapperpublicinterfaceUserMapper{ListgetUserByUsername(Stringusername);}@ServicepublicclassUserService{@AutowiredUserMapperuserMapper;publicListgetUserByUsername(Stringusername){returnuserMapper.getUserByUsername(username);}}@RestControllerpublicclassUserController{@AutowiredUserServiceuserService;@GetMapping("/user")publicListgetUser(Stringusername){returnuserService.getUserByUsername(username);}}UserMapper.xml如下:select*fromuserwhereusername=#{username}是一个很简单的测试,这个环境没什么好说的,你可以随意搭建这个环境,如果你已经有持久化的情况,那就看第二节介绍Druid,现在这个项目默认使用的数据库连接池是HikariDataSource,也就是SpringBoot中默认的数据库连接池,其实这样也不错2.介绍Druid接下来介绍Druid:com.alibabadruid-spring-boot-starter1.2.8注意那SpringBoot引入的Druid就是上面这个,这样以后配置监控的时候会方便一些。接下来,我们在application.properties中配置WebStatFilter。WebStatFilter用于收集web-jdbc关联的监控数据:#启用WebStatFilterspring.datasource.druid.web-stat-filter.enabled=true#配置拦截规则spring.datasource.druid。web-stat-filter.url-pattern=/*#排除一些不需要的url,这些url不会涉及到SQL查询spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*#开启会话统计功能spring.datasource.druid.web-stat-filter.session-stat-enable=true#默认sessionStatMaxCount为1000个,我们可以根据需要配置spring.datasource.druid.web-stat-filter.session-stat-max-count=1000#配置principalSessionName,让druid知道当前session用户是谁#根据需要,这个参数的值为session中存放用户信息的sessionName#spring.datasource.druid.web-stat-filter.principal-session-name=#下面配置的作用和上面的配置类似。这个是通过cookie来识别用户的#spring.datasource.druid.web-stat-filter.principal-cookie-name=#打开profile后可以监控单个URL地址调用列表#spring.datasource.druid.web-stat-filter.profile-enable=我们配置前五个就够了,后面三个不用配置也可以。代码中已经列出了各个配置的含义。接下来打开StatViewServlet的配置,如下:#启用内置监控页面spring.datasource.druid.stat-view-servlet.enabled=true#内置监控页面spring.datasource.druid的地址。stat-view-servlet.url-pattern=/druid/*#EnableResetAllfunctionspring.datasource.druid.stat-view-servlet.reset-enable=true#设置登录用户名spring.datasource.druid.stat-view-servlet.login-username=javaboy#设置登录密码spring.datasource.druid.stat-view-servlet.login-password=123#白名单(如果allow没有配置或者为空,则允许所有访问)spring.datasource.druid.stat-view-servlet。allow=127.0.0.1#黑名单(deny优先于allow,如果在deny列表中,即使在allow列表中也会被拒绝)spring.datasource.druid.stat-view-servlet.deny=Configure页面地址,配置黑白名单。需要注意的是,即使reset-enable属性设置为false,也会显示重置按钮,但点击按钮不会重置。嗯,就是这样。3.测试完成,接下来我们启动SpringBoot项目进行测试。SpringBoot项目启动成功后,首先访问如下地址:http://localhost:8080/druid/login.html此时我们会看到登录认证页面,如下:输入我们之前配置的用户名/密码(javaboy/123)登录,登录成功后可以看到如下页面:从标题栏可以看到,数据源、SQL监控、SQL防火墙等功能都可以使用。接下来我们访问http://localhost:8080/user?username=aaa地址,执行一条SQL。执行完成后,我们查看SQL监控:可以看到,此时有SQL执行的监控记录。其他的监控数据也可以看到,就不一一列举了。如果你觉得这里展示的数据不直观,想自己画HTML页面,那也是可以的。点击最后的JSONAPI可以看到各个监控项的JSON地址。您可以根据需要使用JSON显示来显示它。4.去除广告如果想直接使用这个监控页面,上面有阿里的广告,如下图,企业用起来特别别扭:我们可能要去掉这个广告,也很容易.首先,经过分析,我们发现该广告是由一个名为common.js的文件构建的,该文件位于druid-1.2.8.jar!/support/http/resources/js/common.js,这里的common.js文件中有以下几行:init:function(){this.buildFooter();druid.lang.init();},buildFooter:function(){varhtml='';$(document.body).append(html);},大体逻辑如上,buildFooter方法负责在页尾构建广告,buildFooter方法的调用在init方法中完成.那么如果你想去除广告,只要不调用buildFooter方法即可。所以我们去广告的思路也很简单,写一个过滤器,拦截请求到common.js,然后稍微修改一下,如下:@WebFilter(urlPatterns="/druid/js/common.js")publicclassRemoveAdFilterimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{Stringtext=Utils.readFromResource("support/http/resources/text=js/js");com替换(“this.buildFooter();”,“”);servletResponse.getWriter().write(文本);}}可以看到,这个filter是拦截/druid/js/common.js的请求,拦截之后去文件里面自己读取common.js文件,然后手动替换this.buildFooter();这句话就够了,终于把文件写出来了。当然,记得在启动类中扫描Filter,如下:@SpringBootApplication@ServletComponentScan("org.javaboy.druid_monitor.filter")publicclassDruidMonitorApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DruidMonitorApplication.class,args);}}好的,就是这样,有了这个过滤器,广告就没有了。https://github.com/alibaba/druid/wiki/本文转载自微信公众号“江南的一场小雨”,可通过以下二维码关注。转载本文请联系江南一点鱼公众号。