有时在调试代码的时候需要跟数据库打交道,这时如果知道数据库执行的是什么样的语句,好多问题就迎刃而解了,而p6spy正是这样的一个数据库监控工具。
在Spring应用中使用p6spy时,需要在项目中添加一个spy.properties文件,其中常用的设置有以下几项:
driverlist=com.mysql.jdbc.Driver
reloadproperties=true
logfile = D:\\spy.log
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#appender=com.p6spy.engine.spy.appender.StdoutLogger
appender=com.p6spy.engine.spy.appender.FileLogger
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
dateformat=yyyy-MM-dd HH:mm:ss
其中driverlist需要列出数据源的驱动,reloadproperties表示某些设置能否更新后自动使用新设置,appender表示日志输出的方式,一般选择文件输出,当然也可以选择输出到控制台,logMessageFormat可以选择是多选还是单行日志,dateformat表示日志的时间格式。p6spy的日志格式大概如图所示:
另外在Spring配置中需要使用p6spy自带的数据源来取代原来配置的数据源,实际就是在原来的数据源外面包上一个p6spy的包装,以下是一个用Java类配置的Spring配置文件,使用MySQL的数据源生成P6DataSource类型的数据源,然后在程序中使用这个P6DataSource类型的数据源就可以了:
//配置MySQL数据源
@Bean
public BasicDataSource dataSourceTarget() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://xxx.xx.xxx.xxx:3306/xxxxx?characterEncoding=utf-8");
dataSource.setUsername("xxxx");
dataSource.setPassword("xxxxx");
// dataSource.setDriverClassName("${jdbc.driver}");
// dataSource.setUrl("${jdbc.url}");
// dataSource.setUsername("${jdbc.name}");
// dataSource.setPassword("${jdbc.password}");
dataSource.setMaxActive(30);
dataSource.setMaxIdle(5);
return dataSource;
}
@Bean
public P6DataSource dataSource() {
P6DataSource dataSource = new P6DataSource(dataSourceTarget());
return dataSource;
}