记录 Jdbi 与数据库的交互

问题描述

我已经在此处查看了有关该主题的几个问题/答案,但没有任何开箱即用的方法。我还阅读了官方文档中的 SqlLogger 部分,但我仍然找不到记录/可视化 jdbi(版本 3.x)在与数据库交互时“正在做什么”的方法? — 以一种直接的方式。

我知道 jdbi 使用的是几乎原始的 sql,但是能够看到框架/库说它为了调试目的而做什么总是很好。

我尝试了从 org.jdbi 开始(在 logback.xml 文件中)到 trace 模式的几乎所有命名空间,但我只看到如下内容

03-01-2021 19:52:26,656 |- TRACE in org.jdbi.v3.core.jdbi:315 [reactor-http-epoll-2] - jdbi [org.jdbi.v3.core.jdbi@7a76fb45] obtain handle [org.jdbi.v3.core.Handle@725d5aec] in 0ms
03-01-2021 19:52:26,697 |- TRACE in org.jdbi.v3.core.Handle:187 [reactor-http-epoll-2] - Handle [org.jdbi.v3.core.Handle@725d5aec] released

现在有没有办法做到这一点?

解决方法

不是 JDBI 答案,而是查看原始 SQL 的更通用方法是使用 JDBC 代理,如 P6Spydatasource-proxy

P6Spy 允许通过修饰 DataSource 或存根 JDBC 驱动程序(不需要更改代码)来拦截并以格式打印日志:

p6spy: #1617156635 | took 0ms | statement | connection 3|SELECT NOW()

Datasource-proxy 只支持修饰 DataSource 和打印:

n.t.d.l.l.SLF4JQueryLoggingListener:
Name:,Time:0,Success:True
Type:Statement,Batch:False,QuerySize:1,BatchSize:0
Query:["SELECT NOW()"]
Params:[]