Как записать сбой sql в спящий режим? - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю приложение SpringBoot с помощью spring-data-jpa.Я знаю, как войти все sqls из этого вопроса. Как напечатать строку запроса со значениями параметров при использовании Hibernate

Но что, если я хочу только регистрировать неудачные sqls?

1 Ответ

0 голосов
/ 17 февраля 2019

Существует две опции:

  1. Настройка ведения журнала sql со значениями параметров.Отключите пакетную обработку jdbc и включите сброс через средства гибернации.
  2. Добавьте отладочный драйвер JDBC, такой как p6spy, который будет более или менее работать точно так же, как описано выше.

Сначала давайте проанализируем проблему иразделите типы запросов на запросы SELECT и INSERT / UPDATE.

  1. SELECT запросов , для которых у вас по умолчанию включена очистка.Поэтому, когда возникает ошибка, вы точно знаете, какой запрос не удался.
  2. INSERT / UPDATE запросов , здесь все становится сложнее, потому что ваша очистка будет отключена, и у вас будет пакетная обработка запросов, что означает, что когдаВы запускаете запрос, он задерживается.Во-вторых, он упакован с другими несвязанными запросами, и в-третьих, Hibernate может изменить их порядок.Таким образом, короткий ответ заключается в том, что это невозможно для INSERT / UPDATE, если вы используете только спящий режим.

Для решения вашей проблемы необходимо сделать две вещи: 1. Он должен регистрировать запросы со значениями их параметров.Это можно сделать следующим образом:

# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug 

# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace 

2.Решение должно отключить пакетирование запросов, в противном случае вы получите кучу SQL, но вы не будете знать, какой именно SQL является проблемным.

hibernate.jdbc.batch_size=1

Не уверен, что этого будет достаточно для полногоотключите пакетирование, но вам нужно это выяснить.

В качестве альтернативы вы можете использовать драйвер jdbc, разработанный для DEBUG.Это будет драйвер p6spy, который имеет возможность сбрасывать каждый отдельный оператор SQL, что именно то, что вам нужно.

Здесь вам нужно установить параметр конфигурации autoflush=true, чтобы каждый оператор SQL немедленно сбрасывался вбаза данных.https://p6spy.readthedocs.io/en/latest/configandusage.html

...