Это широкий вопрос, но некоторые методы, которые приходят на ум:
1) Оптимистическая блокировка. Благодаря этому вам не нужно физически блокировать таблицы / строки, поэтому ваши параллельные запросы не ставятся в очередь и не складываются. Вы все равно получите OptimisticLockExceptions
и вам придется с ними справиться, но вы получите некоторые преимущества в производительности с обратной стороны.
2) Старайтесь избегать длинных методов, заключенных в транзакции, которые могут блокировать определенные данные для более чем необходимого. Возможно, вам придется подумать о настройке @Transactionl
методов с помощью PROPAGATION=REQUIRES_NEW
и об общем их сокращении.
3) Попробуйте проверить время ожидания ваших запросов, чтобы они не зависали слишком долго при блокировке и т. Д.