Почему возникла преждевременная ошибка EOF при чтении CSV-файла с помощью запланированной задачи SpringBoot

Ниже показаны соответствующие сегменты кода. Это связано с закрытием соединения или буферной памятью? (Файл, который содержит 50 МБ+ И 65000+ текстовых строк)

@Scheduled(cron = "0 0 9 * * *")
public void retrieveFile() throws IOException{
    try {
        RestTemplate restTemplate=new RestTemplate();
        String url = "URL of the file, which contains 50MB+ AND 65000+ Text Lines";
        restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
        URL targetFileUrl = new URL(url);
        URLConnection connection = targetFileUrl.openConnection();
        InputStream is = connection.getInputStream();
        handleFile(is);
    }catch (Exception e) {
        e.getMessage();
    }
}


public void handleFile(InputStream inputStream) throws IOException {
    BufferedReader reader = null;
    try {
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        reader = new BufferedReader(inputStreamReader);
        String nextLine = null;
        while ((nextLine = reader.readLine()) != null) {
                //saving them in DB
            }
        }
        
    } catch (Exception ex) {
        ex.getMessage();//ERROR POPULATED FROM HERE
    } finally {
        if (reader != null) {
            reader.close();
        }
    }
}

Посоветуйте по этому поводу.! Спасибо.

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

Error Stack Trace : java.io.IOException: Premature EOF
    at java.base/sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:568)
    at java.base/sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:612)
    at java.base/sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:699)
    at java.base/java.io.FilterInputStream.read(FilterInputStream.java:133)
    at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3510)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181)
    at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
    at com.blah.blah.blah.handleFile(FileOps.java:75)//This coding line -> ((nextLine = reader.readLine()) != null) {
    at com.blah.blah.blah.retrieveFile(FileOps.java:65)//This coding line -> handleFile(is);
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    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)

Можете ли вы показать полную трассировку стека и точную строку в вашем коде, которая вызывает исключение?

k314159 13.05.2022 13:23

это только преждевременный eof

Karan Sindhu 13.05.2022 13:31

Попробуйте заменить e.getMessage() на e.printStackTrace() и найдите трассировку стека в журнале вашего сервера, а не в браузере клиента.

k314159 13.05.2022 14:00

конечно, обновлю здесь трассировку стека

Karan Sindhu 13.05.2022 14:05

@ k314159 трассировка стека обновлена!

Karan Sindhu 13.05.2022 15:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исключение генерирует внутренний класс sun.net.www.http.ChunkedInputStream. Этот класс используется для чтения фрагмента http-контента, длина которого была объявлена ​​в начале с помощью HTTP-заголовка Content-Length. Однако содержимое http было неполным, поскольку закончилось до того, как было прочитано ожидаемое количество байтов.

Возможно, это вызвано плохим HTTP-соединением или сервером, который отправляет неполный HTTP-контент. Используйте средство отладки, такое как Wireshark, и проверьте возвращаемый необработанный http-контент; посмотрите Content-Length и убедитесь, что это количество символов доступно для чтения.

Большое спасибо за ваш комментарий, я проверю таким образом.!

Karan Sindhu 14.05.2022 19:46

ваш ответ правильный, так как он развернут на уровне aws-free, он получает переполнение памяти и отключает экземпляр. поэтому связь обрывается.!

Karan Sindhu 16.05.2022 12:52

Другие вопросы по теме