Логгирование обращений к базе данных в Spring Boot

Логгирование обращений к базе данных в Spring Boot

Чтобы логгировать SQL-запросы к базе данных — нужно добавить следующие свойства: Ещё есть вариант использовать библиотеку p6spy, которая будет писать в лог настоящие запросы:

Задержка принятия следующего Jms сообщения после ошибки

Задержка принятия следующего Jms сообщения после ошибки

Вариант реализации JmsListenerContainerFactory (на основе DefaultJmsListenerContainerFactory) для задержки принятия следующего jms сообщения, если был выброшен необработанный эксепшен: Инициализация выглядит следующим образом

9.Транзакционность в JMS

9.Транзакционность в JMS

Транзакционность используется для возвращения сообщения обратно в очередь, в случае возникновения исключения при его обработке. Для настройки транзакционности, нужно указать ContainerFactory бину — бин PlatformTransactionManager. Пример настроек JMS: Для того, чтобы rollback сообщения сработал, достаточно чтобы из метода помеченного @JmsListener выбросилось необработанное исключение. Таким образом, исходное сообщение снова появится в очереди и его хэадер JMSXDeliveryCount увеличится на 1. Но здесь есть сайд-эффект, т.к. это сообщение через секунду снова залетит в приложение. Таким образом, если исключение будет постоянно появляться — мы…

Читать далее Читать далее

Кастомная Jackson десериализация/сериализация

Кастомная Jackson десериализация/сериализация

Допустим, имеем такую DTO: А нам нужно десериализовать из такого json: То используем над полем аннотацию @JsonDeserialize(using = ProductDtoDeserializer.class) и делаем десериализатор А теперь сделаем так, чтобы строковое поле сериализовывалось в UpperCase

Настройка Gitlab CI/CD для java приложения

Настройка Gitlab CI/CD для java приложения

1. Создание раннера Для начала нам нужно организовать постоянно работающий процесс (runner), который будет выполнять все задачи по нашему CICD (т.е. задания билдинга, проверки, закрузки на сервер и выполнения в нём каких-то команд). Кстати, у гитлаба есть много разных публичных runner’ов, но, во-первых — я бы не хотел чтобы код моего закрытого репозитория улетал на какие-то непонятные раннеры, во-вторых — раннер надо настроить под конкретную задачу, чтобы адекватно кешировались промежуточные результаты и не тормозил весь процесс снова и снова проделывая…

Читать далее Читать далее

Добавление модулей в ObjectMapper

Добавление модулей в ObjectMapper

Часто бывают проблемы с десериализацией дат из строки в, например, LocalDateTime. Порой это выглядит так: Есть несколько способов решить эту проблему. Один из них е использование аннотации @JsonFormat над нужным полем в dto Но бывают случаи, когда такое решение не приемлемо. Однако, есть ещё способ — кастомизация самого ObjectMapper’а. Я имею в виду про добавление модулей для сериализации/десериализации. Например, добавление модуля поддержки jsr310: Или добавление модуля поддержки joda: Наряду с этим, есть возможность писать собственные модули для сериализации/десериализации чего угодно….

Читать далее Читать далее

Профилирование java приложений

Профилирование java приложений

Если приложение сжирает слишком много памяти, либо сильно грузит проц, то можно на скорую руку сделать его профилирование. Ниже представлены команды, которые, при запуске на сервере, могут дать понять — в чём проблема. Отображение потребления ресурсов потокам С помощью диспетчера процессов top, можно отобразить список потоков приложения: где 20345 — это PID запущенного процесса Вашего приложения Сэмплинг Помогает найти тормозные методы в приложении. Суть метода заключается в выполнении скоупа нескольких одинаковых запросов. Каждый запрос показывает методы, в которых в данный…

Читать далее Читать далее