Возникает проблема при попытке сохранить отчет, который превышает 4 гигабайта

Здравствуйте!

Jmix version: 1.4.2
Jmix Studio plugin version: 1.5.3-223
IntelliJ version: IntelliJ IDEA 2022.3.1 (Ultimate Edition)

При выполнении отчета в конце должен был выгрузиться .xslx файл, но возникает ошибка из-за ограничений в размере выгружаемого файла:

io.jmix.reports.exception.ReportingException: An error occurred while saving result report. Template name [Название отчета.xlsx] Report name [Название отчета] Failed to add parts from relationships of / Failed to add parts from relationships of /xl/workbook.xml Problem saving part /xl/worksheets/sheet1.xml Error marshalling JaxbXmlPart /xl/worksheets/sheet1.xml xl/worksheets/sheet1.xml's size exceeds the limit of 4GByte. at io.jmix.reports.runner.impl.ReportRunnerImpl.createReportDocumentInternal(ReportRunnerImpl.java:169) at io.jmix.reports.runner.impl.ReportRunnerImpl.run(ReportRunnerImpl.java:96) at io.jmix.reportsui.runner.impl.UiReportRunnerImpl$2.run(UiReportRunnerImpl.java:188) at io.jmix.reportsui.runner.impl.UiReportRunnerImpl$2.run(UiReportRunnerImpl.java:182) at io.jmix.ui.executor.LocalizedTaskWrapper.run(LocalizedTaskWrapper.java:54) at io.jmix.ui.executor.impl.WebBackgroundWorker$WebTaskExecutor.call(WebBackgroundWorker.java:206) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.jmix.ui.executor.impl.WebBackgroundWorker$WebTaskExecutor.lambda$startExecution$1(WebBackgroundWorker.java:385) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)

Какие есть методы изменения ограничений библиотеки?

Jmix version: 1.5.3
Jmix Studio plugin version: 2.0.4-232
IntelliJ version: IntelliJ IDEA 2023.2.3 (Ultimate Edition)

Здравствуйте,

Я занимаюсь вашим вопросом, чуть позже отпишу по результату.

С Уважением,
Никита

1 симпатия

Пока ищу решение проблемы, можете рассказать подробнее об отчёте? Что это за отчёт (количество полей, примерное количество строк и тд)? Как часто он создаётся? И генерация происходит через API или UI?

С Уважением,
Никита

Отчетов несколько, но один из отчетов 680 тыс строк, 22 столбца. Отчет запускается ежедневно и генерируем через UI.
Есть еще отчеты, в них ±1 млн строк

При этом бывают отчеты в разы больше, которые успешно выполняются и так же есть отчеты в разы меньше, которые падают с ошибкой. По моему тут больше дело в весе данных

Да, вопрос в данных.

Можно реализовать такой вариант:
В генерируемые отчёты добавить параметры для фильтрации данных, это может быть дата создания данных или диапазон строк выводимых в отчёте. Далее реализовать Job’у которая будет асинхронно выполняться через заданных промежуток времени (Например, ежедневно, каждый час и тд) и генерировать отчёты.

По итогу у вас получится несколько

Report_19-10-2023_08-00.xlsx
Report_19-10-2023_10-00.xlsx
Report_19-10-2023_12-00.xlsx
...

Или

Report_0-100000.xlsx
Report_100001-200000.xlsx
Report_200001-300000.xlsx
...

Тем самым у вас уменьшится объем данных в одном отчёте и уменьшится время генерации отчётов.

Мы сами рассматривали вариант дробления отчета на множество отчетов поменьше, но заказчиков это не устраивает. Нет вариантов в которых мог бы выгружаться цельный отчет?

Пока не вижу других вариант. Ошибку бросает библиотека Apache Compress, которая используется в POI для формирования отчёта. Можно посмотреть в ту сторону и поискать способы конфигурации библиотеке Apache POI.

С Уважением,
Никита

1 симпатия