打印执行SQL与耗时
用途
痛点: 当我们测试业务的时候,需要查看实际执行的SQL与耗时时间,很多上层的驱动会有多种开启打印的方式,很多都需要修改代码或修改配置打印。
DebugTools 通过在 jdbc 层通过 修改数据库驱动字节码 实现在运行时打印SQL与耗时,从而避免上层数据库链接池的不同影响SQL的打印。
理论上支持所有通过Jdbc链接的数据库驱动:
使用
Idea
在 setting -> Other Settings -> DebugTools 中配置开启或者关闭

Pretty: 格式化打印SQL语句Compress: 压缩形式打印SQL语句No: 不打印SQLAuto save sql to file: 将SQL保存到文件中SQL Retention Days: 保留多少天
SQL文件在.idea/DebugTools/sql 文件夹下,也可以点击 ToolsWindow 打开最新SQL文件。

成功会在日志中输出 Print xxx(mysql/oracle/...) log bytecode enhancement successful

打印效果如下:
text
Execute consume Time: 3 ms; Execute SQL:
SELECT
id,
name,
age,
version
FROM
dp_user
WHERE
id=1注意
- 由于 DebugTools 是通过字节码的方式打印SQL,所以修改配置后需要重新启动应用才能生效。
- 启动应用时开启打印SQL配置(Compress / Pretty)可以在附着应用之后进行动态修改SQL打印配置。
动态配置
启动应用时开启打印SQL配置(Compress / Pretty),可以在附着应用之后进行动态修改SQL打印配置。

过滤 sql
当 sql 太多的时候,我们可以配置过滤指定sql。

TIP
只有开启打印 sql 的时候才能看见忽略 SQL 的配置
支持如下的四个配置
sql.print.packages:打印指定调用链路包下的SQL- 识别方式是通过执行线程堆栈信息是否正则匹配配置的包名
- 该配置优先级高于 sql.print.ignore-packages
- 支持正则
sql.print.ignore-packages:忽略打印指定调用链路包下的SQL- 识别方式是通过执行线程堆栈信息是否正则匹配配置的包名
- 如果配置了 sql.print.packages 则该配置失效
- 支持正则
sql.print.statement:打印指定SQL语句- 该配置优先级高于 sql.print.ignore-statement
- 支持正则
sql.print.ignore-statement:忽略指定SQL语句- 如果配置了 sql.print.statement 则该配置失效
- 支持正则
文件内容就是普通的txt,内容写到对应段的下面,支持 # 和 ; 注释。[[xxx]] 是固定格式。支持多行。如:
txt
[[sql.print.packages]]
com.example.demo
com.example.test
[[sql.print.ignore-packages]]
com.example.demo
com.example.test
[[sql.print.statement]]
select 1
select * from user
[[sql.print.ignore-statement]]
select 1
select * from user警告
最好不要在生产环境中使用
因为 DebugTools 通过 修改数据库驱动字节码 来实现SQL的打印,可能出现兼容不到位或者其他考虑不到的情况,生产环境可能存在风险。