Arthas如何打印SQL?

213 阅读1分钟

——在不改变原有使用方式的情况下增强 watch 命令

1. 背景:为什么需要增强 Arthas watch

原生 Arthas 的能力主要集中在:

  • 查看方法入参、返回值、异常
  • 查看对象内部状态
  • 动态观察方法执行耗时
  • 条件触发(如参数为特定值时执行)

但看不到方法调用链内部的 SQL —— MyBatis 执行 SQL 时使用自己的拦截链,不会自然暴露给 Arthas。

而我们希望的能力是:

  • 不修改业务代码
  • 不重启应用
  • 不改动 Arthas 的使用习惯
  • 在 watch demo.MathGame primeFactors -x 2 的同时能看到该方法内触发的 MyBatis SQL

因此我们选择的方案是 —— 在不改变 Arthas 使用方式的前提下,为 watch 增加 SQL 观测能力。

watchsql.gif


如果是本地开发:推荐使用 MyBatis Log Ultra 插件

在本地开发调试时,并不推荐使用 Arthas,因为:

  • 本地 IDE 直接有完整的 SQL 日志更方便
  • 插件支持可视化展示 SQL
  • 可以展开参数、格式化 SQL、查看耗时
  • 完全零侵入,无需任何配置

在本地场景,直接用这个插件就足够了。

mybatis_log_ultra_1.gif