JFinal

登录 注册

DruidPlugin 插件的自定义Filter

詹波老师您好:

下面代码是配置druid插件的,有一个TestFilter是自定义的(继承自FilterEventAdapter类),部分代码如下:

druidPlugin.addFilter(new TestFilter());

druidPlugin.addFilter(new StatFilter());

druidPlugin.addFilter(new WallFilter());

druidPlugin.setFilters("stat,wall");

出现是的疑问是如何将TestFilter也添加到druidPlugin.setFilters("stat,wall")里面,实现在执行sql语句之前或者之后进行一些处理工作。

请帮忙赐教,谢谢!


评论

  • 05-15 17:46
    将 druidPlugin.setFilters("stat,wall"); 这句也改成 addFilter(new WallFilter()) addFilter(new StatFilter()) 的风格即可

    因为你的 druidPlugin.setFilters("stat,wall"); 会冲掉前面的 addFilter
  • 05-15 20:28
    @JFinal 如果不加druidPlugin.setFilters("stat,wall")这句,在插件的start()过程中(debug跟踪)时候,发现filters=null,所以才想如何将TestFilter放在filters中,谢谢。
  • 05-16 09:10
    @JFinal 波总好:细看了一下druid插件的添加filters的方法,最后得到的targetList过滤器数组并没有调用ds.setProxyFilters(targetList),因此添加的自定义druid过滤器没有执行是否原因出在这里呢?帮忙确认,谢谢!
    private void addFilterList(DruidDataSource ds) {
    if (filterList != null) {
    List targetList = ds.getProxyFilters();
    for (Filter add : filterList) {
    boolean found = false;
    for (Filter target : targetList) {
    if (add.getClass().equals(target.getClass())) {
    found = true;
    break;
    }
    }
    if (! found)
    targetList.add(add);
    }
    }
    }
  • 05-16 10:12
    @JFinal 谢谢波总,问题找到了,不是插件的问题,是我的过滤器监视的不对,打扰波总了!
  • 发送