Spring data JPA использует все объекты подключения - PullRequest
0 голосов
/ 03 августа 2020

У меня есть сценарий, в котором данные загружаются из листа Excel в mysql db. Я использую данные Spring JPA. И служба рекурсивно вызывает объекты после заполнения их данными, взятыми из таблицы Excel, для сохранения в db. Это создает «невозможно получить jdb c соединения» после определенной нагрузки.

Я попытался использовать @Transactional, чтобы узнать преимущество. Затем я подумываю использовать EntityManager вручную в коде и контролировать границу транзакции, чтобы все рекурсивные вызовы сохранения сущностей происходили в рамках одной транзакции и, следовательно, одного объекта подключения. Я просто хотел проверить, будет ли это хорошая идея или есть какой-либо другой подход, который я должен использовать, более производительный. В любом случае, излишне говорить, что я должен делать это через сущности.

1 Ответ

2 голосов
/ 03 августа 2020

Мой ответ полностью основан на предположении, что способ реализации требования неверен, поскольку в вопросе нет общего кода.

Согласно вашему подходу, да, у вас закончится соединение поскольку популяция сущностей наверняка будет намного быстрее, чем сохранение этой сущности в базе данных, и поскольку вы делаете это рекурсивно, ваше приложение в какой-то момент времени исчерпает соединения, если объем данных очень велик, числа здесь, безусловно, являются фактором .

Другой подход, который я бы предпочел, заключается в том, что вы можете подготовить свои сущности (предполагая, что все данные предназначены для общего класса сущностей) и сохранить в коллекции, когда она будет готова, вы можете сохранить все это в одном транзакция с использованием метода saveAll (). Если данные не для общих сущностей, вы можете создать несколько списков различных сущностей и инициировать операции с базой данных после обработки листа Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...