使用p6spy+beetlsql记录真实执行sql
开发体验
其实当我们使用一种语言,一个框架的时候,这时的我作为用户,语言的冗余语法,框架的复杂配置,都会让我们开发体验变糟
P6SPY亮点
完整记录sql,某连接池记录如下:
2017-05-05 23:25:38.680 [http-apr-8180-exec-6] DEBUG java.sql.Connection:47 - ==> Preparing: INSERT INTO table (filed1, filed2, filed3, filed4) VALUES (?, ?, ?, ?) 2017-05-05 23:25:38.686 [http-apr-8180-exec-6] DEBUG java.sql.PreparedStatement:47 - ==> Parameters: 1(Long), aa(String), bb(String), 4(Integer)
如果我们要单独调试sql,则需要复制两条,而且还要自己手工赋值,而且我认为数据库连接池应该专注性能,而不是做这些监控之内的东西
p6spy记录如下:
2017-05-05 23:30:17,836 ma I # took 28ms | statement | connection 0|insert into public.user (name,age,nick_name) VALUES (?,?,?) insert into public.user (name,age,nick_name) VALUES ('lijiatu',24,'david');
下面两句可以直接cv,然后调试,开发时相当方便
本文下方有项目的gitosc地址
P6SPY集成非常简单,也有广泛的支持,包括JNDI
P6SPY的其它优点
它类似一个简单的jdbc connection代理吧,它还有以下的特色功能
- 记录长sql,这点即使上线也可以用得到,再spy.properties的# outagedetection=true|false# outagedetectioninterval=integer time (seconds)中
- 灵活的sql过滤,可以使用filter include include sqlexpression来过滤
- 可以和slf4j集成,这样可以使用通用的日志系统来记录日志
开始集成P6SPY,maven中
- 添加依赖
- 设置spy.properties
- 配置KiKariCP
- 配置log4j2
- 新建测试数据表
- 获取sqlManager
- 执行,看到结果
1.添加依赖
主要有p6spy,HikariCP,slf4j-api,beetlsql,log4j2,都在项目的pom文件中
2.设置spy.properties
spy.properties需要放在项目的classpath根目录下,我是放在resources目录下了,由于我用的是postgresql和log4j2,所以我的配置是
driverlist=org.postgresql.Driver appender=com.p6spy.engine.spy.appender.Slf4JLogger
另外我没有用预设的logMessageFormat,而是自己实现了接口写了pers.apricot.MyStyle
logMessageFormat=pers.apricot.MyStyle
3.配置KiKariCP
HikariCP.props中,url配置时要注意,jdbc:后面加上p6spy,最终效果如下
jdbcUrl=jdbc:p6spy:postgresql:postgres
注意jdbcUrl的配置和dataSourceClassName是二选一,再使用p6spy的时候,最好不要在写dataSourceClassName了,否则有可能出错,我以前两个都配还行,现在使用了p6spy就不行了
如果使用其它的数据源,也是这样的规则,jdbc:后面加上p6spy
4.配置log4j2
由于只是测试,我就配了console和随机文件两个appender
5.新建测试数据表
在项目的script下面有postgresql的脚本
6.获取sqlManager
beetlsql围绕sqlManager来操作,在这里获取ConnectionSource的时候可以使用这种方式
ConnectionSourceHelper.getSingle(dataSource)
7.执行,看到结果
只是一条简单的插入语句,最终结果如下
2017-05-06 15:38:07,342 ma I # took 108ms | statement | connection 0|insert into public.user (name,age,nick_name) VALUES (?,?,?) insert into public.user (name,age,nick_name) VALUES ('lijiatu',24,'david');
项目在码云上,地址是**learn-p6spy**
p6spy作为一个轻jdbc代理,还是很有用处的,可以自己继续挖掘
原文地址:https://my.oschina.net/DavidRicardo/blog/895877
相关推荐
-
4 种开源云安全工具 服务器
2020-5-25
-
Docker Compose 原理 服务器
2019-3-25
-
Linux 日志基础 服务器
2019-3-11
-
腾讯成本优化黑科技:整机CPU利用率最高提升至90% 服务器
2019-10-15
-
如何在 Linux 中启用 Shell 脚本的调试模式 服务器
2019-3-8
-
MySQL 表锁和行锁机制 服务器
2019-3-18
-
一个可以提高开发效率的Git命令– Cherry-Pick 服务器
2020-6-13
-
基于Netty模拟解析Binlog 服务器
2020-5-31
-
Linux 下修改或者重命名用户名称或者UID/GID 服务器
2019-10-16
-
2020,请你平安地,在我身边 服务器
2020-6-28