«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как передавать большие наборы результатов MySQL весной, чтобы избежать OutOfMemoryError?

Как передавать большие наборы результатов MySQL весной, чтобы избежать OutOfMemoryError?

Опубликовано 22 декабря 2024 г.
Просматривать:558

How to Stream Large MySQL Result Sets in Spring to Avoid OutOfMemoryError?

Потоковая передача больших наборов результатов с помощью MySQL

При работе с обширными таблицами MySQL в приложении Spring может возникнуть исключение OutOfMemoryException, поскольку драйвер пытается загрузить всю таблицу в память. Установка оператора.setFetchSize(Integer.MIN_VALUE); может быть недостаточно, так как это всего лишь подсказка для драйвера JDBC.

Чтобы включить потоковую передачу наборов результатов в драйвере JDBC MySQL, требуется более комплексный подход:

  1. Создайте экземпляр запроса:

    stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
  2. Установить выборку Размер:

    stmt.setFetchSize(Integer.MIN_VALUE);

Предупреждения:

У этого метода есть определенные предостережения:

  • Все строки в наборе результатов должны быть прочитаны (или набор результатов закрыто) перед отправкой дальнейших запросов о соединении. Невыполнение этого требования приведет к возникновению исключений.
  • Внутри транзакции блокировки снимаются только после завершения транзакции, подразумевая, что оператор должен сначала завершить выполнение.
  • Если ошибка OutOfMemoryError сохраняется, основная проблема может заключаться в чрезмерном использовании памяти в коде Java. Это требует немедленной обработки данных вместо их хранения.

Дополнительная информация:

Для дальнейших стратегий обработки больших наборов результатов рассмотрите этот связанный вопрос и ответ на него: [ссылка на аналогичный вопрос].

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3