首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >P6Spy。如何检测停机语句?

P6Spy。如何检测停机语句?
EN

Stack Overflow用户
提问于 2018-07-23 12:23:02
回答 2查看 479关注 0票数 0

我正在尝试使用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,我做了以下配置。

  1. 在pom.xml 在这里输入图像描述中添加依赖项
  2. 在p6spy (http://p6spy.readthedocs.io/en/latest/configandusage.html#common-property-file-settings)的官方文档中,我得到了spy.property,只留下了我需要的属性。下面代码中的结果(为了提高可读性,我删除了一些注释行):在这里输入图像描述
  3. 下一步更改我的application.yml:
代码语言:javascript
复制
- 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)

EN

回答 2

Stack Overflow用户

发布于 2018-07-25 08:54:17

您需要从com.p6spy.engine.logging.P6LogFactory属性中删除modulelist

另外,为了更简单的配置,您可以使用我的图书馆,这是我为与spring集成而创建的。它允许使用spy.properties对大多数application.yml进行更简单的配置。

票数 0
EN

Stack Overflow用户

发布于 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异常。

代码语言:javascript
复制
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的工厂,我解决了这个异常。新类的代码如下:

代码语言:javascript
复制
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库,我发现了两个变体:

  1. 如果我在‘模块化’属性中设置'com.p6spy.engine.outage.P6OutageFactory‘,我必须创建额外的类,这将创建一个P6LogOptions实例。
  2. 如果我在“模块化者”属性中设置了“com.p6spy.engine.outage.P6OutageFactory”,我还必须在“模块化者”属性中设置一个P6LogFactory值,并将“排除式”属性设置为'info、调试、结果、结果集、批处理、提交、语句‘,仅用于过滤中断语句。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51478699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档