P6Spy. Как обнаружить отключение?

Я пытаюсь использовать p6spy для входа в систему отключения SQL-заявление. Основываясь на официальном документе ( http://p6spy.readthedocs.io/en/latest/index.html), я могу сделать это, установив определенные свойства в файле spy.properties, такие как outagedetection и outagedetectioninterval. Я установил значение outagedetection в 'true', а интервал outagedetection в '1', и я подумал, что я видел только операторы со временем выполнения более 1 секунды в моем файле spy.log результатов, но я получил неожиданный результат:( - Я видел все sql-это заявление, несмотря на то, что я установил свойства отключения. Кто-нибудь сталкивался с такой проблемой?

Мы используем hibernate 5 + пружинный ботинок + h2 db + maven. Для использования p6spy я сделал следующую конфигурацию.

  1. Добавить зависимость в pom.xml введите описание изображения здесь

  2. В официальном документе p6spy ( http://p6spy.readthedocs.io/en/latest/configandusage.html) я получил spy.property и оставляю только нужные мне свойства. Результат в коде ниже (я удалил некоторые закомментированные строки для удобства чтения): введите описание изображения здесь

  3. Изменил мой application.yml следующим образом:

2 ответа

Вы должны удалить com.p6spy.engine.logging.P6LogFactory от modulelist имущество.

Также для упрощения настройки вы можете использовать мою библиотеку, которую я создал для интеграции с spring-boot. Это позволяет более простую настройку для большинства spy.properties с помощью application.yml,

Спасибо, ваш совет помог мне. Но все же есть проблема, которую я еще не понял. Для записи sql-оператора у меня должен быть экземпляр P6LogOptions.class. Если я устанавливаю com.p6spy.engine.logging.P6LogFactory в качестве значения свойства modulelist, экземпляр класса P6LogOptions.class создается в переопределенном методе getOptions (...) (этот метод объявлен в интерфейсе P6Factory)., В случае 'com.p6spy.engine.outage.P6OutageFactory' в качестве значения свойства 'modulelist' у нас нет экземпляра 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
    };
}

}

На мой взгляд, такое поведение немного странно. Я предполагаю использовать свойство 'modulelist' со значением 'com.p6spy.engine.outage.P6OutageFactory' без создания дополнительных классов.

Для правильного использования p6spy lib я нашел 2 варианта:

  1. если я устанавливаю com.p6spy.engine.outage.P6OutageFactory в свойстве modulelist, я должен создать дополнительный класс, который создает экземпляр P6LogOptions.
  2. если я устанавливаю 'com.p6spy.engine.outage.P6OutageFactory' в свойстве 'modulelist', я также должен установить значение P6LogFactory в свойстве 'modulelist' и установить свойство 'excludecategories' в качестве 'info,debug,result,resultset,batch,commit, Statement 'только для фильтрации операторов.
Другие вопросы по тегам