开发者社区> 问答> 正文

StatFilter扩展问题

想做一个需求,

显示活动链接正在运行的sql,如果正在运行一个sql很慢的话,就可以直接在活动连接那里看到。

现在的想法是对StatFilter做子类,复写几个方法,需要用到StatFilter.buildSlowParameters方法,这个方法是private的,是否可以将他变为protected,这样就不需要整个方法拷贝出来了。

另外,internalAfterStatementExecute方法中的 if (logSlowSql) { LOG.error("slow sql " + millis + " millis. "。。。 } if里面那一行,是否可以做成一个protected函数,这样在有需要的时候也可以复写

原提问者GitHub用户sunchey11

展开
收起
山海行 2023-07-05 20:40:30 66 0
3 条回答
写回答
取消 提交回答
  • 如果您想要扩展StatFilter以满足特定需求,建议不直接修改StatFilter中的私有方法。这样做可能会破坏StatFilter的封装性和稳定性,并且不是一种良好的编程实践。

    相反,建议采用以下方法来实现您的需求:

    1. 使用Druid提供的配置项:Druid提供了许多配置选项,可以通过设置这些选项来满足您的需求。例如,您可以设置druid.stat.logSlowSqltrue,来记录慢查询日志。您可以查阅Druid的官方文档或源代码中的配置项列表,找到适合您需求的配置选项。

    2. 使用Druid提供的监听器功能:Druid提供了一系列的监听器接口,通过实现这些接口并注册相应的监听器,可以在执行SQL语句的不同阶段进行自定义操作。您可以实现StatListener接口,在afterStatementExecute方法中处理慢查询的情况,并根据需要输出日志或进行其他操作。详细的使用方法请参考Druid的官方文档。

    通过以上方法,您无需修改StatFilter的私有方法,而是利用Druid提供的扩展机制实现您的需求。这样可以保持代码的可维护性和兼容性。如果您仍然遇到问题,建议您查阅Druid的官方文档、GitHub仓库或寻求相关技术支持以获取更多帮助。

    2023-07-30 14:05:13
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    如果您想要对StatFilter进行子类化并复写其方法以实现特定的需求,建议不要直接修改StatFilter中的私有方法,因为这可能会破坏StatFilter的封装性和稳定性。虽然可以通过反射等方式来访问和修改私有方法,但这并不是一个良好的编程实践,容易引发不可预见的问题。

    相反,建议通过其他方式实现需求,例如使用Druid提供的配置和监听器功能

    2023-07-30 13:46:06
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:52:31
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载