1. Обзор
Spring JDBC и JPA предоставляют абстракции над собственными API JDBC, позволяя разработчикам отказаться от собственных SQL-запросов. Однако часто нам нужно видеть эти автоматически сгенерированные SQL-запросы и порядок, в котором они были выполнены для целей отладки.
В этом кратком руководстве мы рассмотрим различные способы регистрации этих SQL-запросов в Spring Boot.
Дальнейшее чтение:
Весенний JDBC
Введение в весенние данные JPA
Перехватчики гибернации
2. Ведение журнала запросов JPA
2.1. К Стандартному Выходу
Самый простой способ сбросить запросы в стандартную форму-это добавить следующее в application.properties :
spring.jpa.show-sql=true
Чтобы украсить или красиво напечатать SQL, мы можем добавить:
spring.jpa.properties.hibernate.format_sql=true
Хотя это чрезвычайно просто, это не рекомендуется , так как он напрямую выгружает все в стандартный вывод без какой-либо оптимизации структуры ведения журнала.
Более того, он не регистрирует параметры подготовленных операторов.
2.2. Через Регистраторы
Теперь давайте посмотрим, как мы можем регистрировать операторы SQL, настроив регистраторы в файле свойств:
logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
В первой строке записываются запросы SQL, а во второй инструкции записываются подготовленные параметры инструкции.
Свойство pretty print также будет работать в этой конфигурации.
Установив эти свойства, журналы будут отправлены в настроенное приложение . По умолчанию Spring Boot использует logback со стандартным приложением out.
3. Ведение журнала запросов JdbcTemplate
Чтобы настроить ведение журнала операторов при использовании JdbcTemplate , нам нужны следующие свойства:
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE
Аналогично конфигурации ведения журнала JPA, первая строка предназначена для ведения журнала операторов, а вторая-для регистрации параметров подготовленных операторов.
4. Как Это Работает?
Классы Spring/Hibernate, которые генерируют операторы SQL и задают параметры, уже содержат код для их регистрации .
Однако уровень этих операторов журнала установлен на DEBUG и TRACE соответственно, что ниже уровня по умолчанию в Spring Boot – INFO .
Добавляя эти свойства, мы просто устанавливаем эти регистраторы на необходимый уровень.
5. Заключение
В этой короткой статье мы рассмотрели способы регистрации SQL-запросов в Spring Boot.
Если мы решим настроить несколько приложений , мы также можем разделить операторы SQL и другие операторы журнала в разные файлы журналов, чтобы сохранить чистоту.