Коллеги, доброго вам времени суток.
Хочу поднять одно обсуждение. Мне интересно мнение сообщества на этот счет.
Введение
camunda для работы с БД использует пул коннектов. Если мы используем spring-boot-2, то по-умолчанию будет использоваться имплементация HikariPool.
У HikariPool по умолчанию активирован autoCommit. (Думаю все знают что такое autoCommit и как он работает)
С другой стороны внутри camunda-engine реализован паттерн Command, есть CommandContext и CommandExecutor-ы которые исполняют команды.
Так вот команды, они транзакционные. За транзакционность отвечает SpringTransactionInterceptor, которые работает с помощью transactionManager и transactionTemplate соответственно.
В кач-ве transactionManager используется спринговая реализация DataSourceTransactionManager, которой в методах doBegin, doCleanupAfterCompletion принудительно выключает autoCommit и потом возвращает его значение как было до транзакции.
Мой вопрос заключается вот в чем. Есть ли какая-то best practice для камунды, как лучше лететь с автокоммитом или без? Возможно у кого-то есть набитые на этот счет шишки.
Меня в общем-то смущает страшный комментарий в методе doBegin
Switch to manual commit if necessary. This is very expensive in some JDBC drivers,
so we don't want to do it unnecessarily (for example if we've explicitly
configured the connection pool to set it already).
Поскольку если мы используем postgresql, это приводит к тому, что PG в момент переключения автокоммита с true на false будет слать отдельностоящую команду commit;.
И поскольку все вот эти транзакционные команды выполняются довольно часто, то выходит что выполнение каждой команды будет порождать "холостой выстрел" в виде commit;
Что думает сообщество на этот счет? Стоит ли заморачиваться на ваш взгляд в этом вопросе?