我正在尝试使用p6spy来记录中断sql-语句。基于官方文档(http://p6spy.readthedocs.io/en/latest/index.html),我可以通过在spy.properties文件中设置特定属性(如中断检测和中断检测间隔)来做到这一点。我在'true‘中设置了输出检测值,在'1’中设置了中断检测间隔,我认为在我的结果spy.log文件中只看到了执行时间超过1秒的语句,但是我得到了意想不到的结果:( -尽管我设置了中断,但我看到了所有sql-语句。有没有人面对这样的问题?
我们使用hibernate 5+ spring引导+ h2 db + maven。对于使用p6spy,我做了以下配置。
- change url and app :p6spy postfix after jdbc.
- set driverClassName property. The result in the code below: [enter image description here](https://i.stack.imgur.com/U96M0.png)
发布于 2018-07-25 08:54:17
您需要从com.p6spy.engine.logging.P6LogFactory属性中删除modulelist。
另外,为了更简单的配置,您可以使用我的图书馆,这是我为与spring集成而创建的。它允许使用spy.properties对大多数application.yml进行更简单的配置。
发布于 2018-08-06 14:21:29
谢谢,你的建议对我有帮助。但仍然有一个问题我还没有理解。要记录sql-语句,我必须有一个实例P6LogOptions.class。如果我将“com.p6spy.engine.logging.P6LogFactory”设置为“模块化”属性的值,则在overriden getOptions(.)中创建P6LogOptions.class实例。方法(此方法在P6Factory接口中声明)。在“com.p6spy.engine.outage.P6OutageFactory”作为“模块化”属性的值的情况下,我们没有P6LogOptions.class的实例,在本例中,我遇到了NPE异常。
Exception in thread "P6SpyOutageThread" java.lang.NullPointerException
at com.p6spy.engine.common.P6LogQuery.isLoggable(P6LogQuery.java:148)
at com.p6spy.engine.common.P6LogQuery.logElapsed(P6LogQuery.java:188)
at com.p6spy.engine.outage.P6OutageDetector.logOutage(P6OutageDetector.java:142)
at com.p6spy.engine.outage.P6OutageDetector.detectOutage(P6OutageDetector.java:136)
at com.p6spy.engine.outage.P6OutageDetector.run(P6OutageDetector.java:78)
at java.lang.Thread.run(Thread.java:748)通过在我的项目中再创建一个实现P6Factory.class的工厂,我解决了这个异常。新类的代码如下:
public class LogFactory implements P6Factory {
@Override
public P6LoadableOptions getOptions(P6OptionsRepository optionsRepository) {
return new P6LogOptions(optionsRepository);
}
@Override
public JdbcEventListener getJdbcEventListener() {
return new JdbcEventListener() {
// NOOP
};
}}
在我看来,这种行为有点奇怪。我应该使用具有“com.p6spy.engine.outage.P6OutageFactory”值的“模块化”属性,而不需要创建额外的类。
为了正确使用p6spy库,我发现了两个变体:
https://stackoverflow.com/questions/51478699
复制相似问题