[alibaba/druid]如何能够在SQL执行之前统一添加注释信息?

2025-11-05 613 views
5

项目上有对此能力的诉求,希望能够在SQL注释中体现traceId等易于定位的信息,基于Druid如何实现?

回答

2

继承 FilterEventAdapter,实现自己的Filter,注册进去即可。 重载以下几个方法,把sql修改拼上注释之后,再调用super.statementExecuteUpdateBefore等对应方法即可。

  @Override
    protected void statementExecuteUpdateBefore(StatementProxy statement, String sql) {
    }
 @Override
    protected void statementExecuteQueryBefore(StatementProxy statement, String sql) {
    }
  @Override
    protected void statementExecuteBefore(StatementProxy statement, String sql) {
    }
   @Override
    protected void statementExecuteBatchBefore(StatementProxy statement) {
}
0

不过合理的trace做法,建议应该是基于filter的这些方法,旁路采集sql生成trace即可。 我最近刚刚做了这样的实现,基于opentelemetry的sdk封装,然后通过slf4j生成trce日志即可。

2

不过合理的trace做法,建议应该是基于filter的这些方法,旁路采集sql生成trace即可。 我最近刚刚做了这样的实现,基于opentelemetry的sdk封装,然后通过slf4j生成trce日志即可。

感谢你的回答,当前诉求的场景是通过数据库SHOW PROCESSLIST命令就可以直接看到当前数据库慢SQL以及对应的链路信息。

0

不过合理的trace做法,建议应该是基于filter的这些方法,旁路采集sql生成trace即可。 我最近刚刚做了这样的实现,基于opentelemetry的sdk封装,然后通过slf4j生成trce日志即可。

感谢你的回答,当前诉求的场景是通过数据库SHOW PROCESSLIST命令就可以直接看到当前数据库慢SQL以及对应的链路信息。

那你按照我前面的方案再sql前面拼上 带traceid的注释,然后调用super方法即可。