Spring Batch FlatFileItemWriter: получение «запрошенного размера массива превышает ограничение виртуальной машины» при записи файла с большим количеством столбцов - PullRequest
0 голосов
/ 01 октября 2018

Я сталкиваюсь со следующим исключением при использовании пакета FlatFileItemWriter в Spring для записи данных из Map (т.е. в кеш) в файл:

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
        at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:300)
        at java.lang.StringCoding.encode(StringCoding.java:344)
        at java.lang.String.getBytes(String.java:918)
        at org.springframework.batch.support.transaction.TransactionAwareBufferedWriter.getBufferSize(TransactionAwareBufferedWriter.java:163)
        at org.springframework.batch.item.file.FlatFileItemWriter$OutputState.position(FlatFileItemWriter.java:442)
        at org.springframework.batch.item.file.FlatFileItemWriter.update(FlatFileItemWriter.java:366)

Я посмотрел накод, присутствующий в строке 163 в классе TransactionAwareBufferedWriter Spring Batch, который выглядит следующим образом:

public long getBufferSize() {
        if (!transactionActive()) {
            return 0L;
        }
        try {
            //Exception is at the following line - Line number 163
            return getCurrentBuffer().toString().getBytes(encoding).length;
        } catch (UnsupportedEncodingException e) {
            throw new WriteFailedException("Could not determine buffer size because of unsupported encoding: " + encoding, e);
        }
 }

Чтобы получить больше фона, файл, в который я пишу, имеет около 129 столбцов для записи.Я понимаю, что это большое число, но сокращение количества столбцов не вариант.Кроме того, перед тем, как возникнет это исключение, в файл будет записано большое количество записей (в миллионах).

Если посмотреть на исключение и строку кода, вызывающую его, похоже, что проблема возникает, когда числоколичество байтов в буфере превышает разрешенное виртуальной машиной (размер массива).

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

Любые указания о том, как мне поступить для устранения этой ошибки, были бы полезны

...