0Pricing
Spring Boot 4 Microservices & REST APIs · Урок

Перезапуск и обработка ошибок

Восстанавливайтесь после сбоев в пакетных заданиях

«Перезапуск и обработка ошибок» — бесплатный урок Spring Boot 4 Microservices & REST APIs на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Spring Boot 4 Microservices & REST APIs, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Spring Boot 4 Microservices & REST APIs содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Failures are inevitable

Long batch jobs hit bad rows, transient network errors, and crashes. Spring Batch provides skip, retry and restartability so a job can survive and resume.

Restartability basics

Because the JobRepository records each step execution, a failed job can be restarted and it resumes from where it stopped, not from the beginning. The same JobParameters must be used.

Re-launching a failed job

Relaunch with the same parameters and Spring Batch detects the prior failed execution and continues it. Completed steps are skipped.

JobParameters params = new JobParametersBuilder()
        .addString("runDate", "2026-05-30")
        .toJobParameters();
// running again with SAME params resumes the failed instance
jobLauncher.run(importJob, params);

Skipping bad items

Use a fault-tolerant step to skip records that throw a given exception, up to a limit, instead of failing the whole job.

return new StepBuilder("step1", repo)
        .<Person, Person>chunk(10, tx)
        .reader(reader()).processor(proc()).writer(writer())
        .faultTolerant()
        .skip(ParseException.class)
        .skipLimit(20)
        .build();

Skip limit

The skipLimit caps how many skips are tolerated. Once exceeded, the step fails. This prevents a job from silently ignoring a flood of bad data.

Retrying transient errors

For temporary failures (a deadlock, a brief network blip) use retry. The item operation is retried up to a limit before being skipped or failing.

return new StepBuilder("step1", repo)
        .<Person, Person>chunk(10, tx)
        .reader(reader()).processor(proc()).writer(writer())
        .faultTolerant()
        .retry(DeadlockLoserDataAccessException.class)
        .retryLimit(3)
        .build();

Combining skip and retry

You can chain both: retry transient exceptions a few times, and skip persistent ones. Order matters - retry first, then skip if retries are exhausted.

.faultTolerant()
.retry(TransientException.class).retryLimit(3)
.skip(InvalidDataException.class).skipLimit(50)

SkipListener and RetryListener

Listeners let you observe and log what was skipped or retried, which is essential for auditing batch runs.

public class LogSkipListener implements SkipListener<Person, Person> {
    @Override
    public void onSkipInProcess(Person item, Throwable t) {
        log.warn("Skipped {} due to {}", item, t.getMessage());
    }
}

Idempotency matters

On restart, already-committed chunks are not re-read, but your writes should still be idempotent where possible (use upserts or natural keys) so a partial run does not create duplicates.

No-rollback exceptions

Sometimes an exception should not roll back the chunk. Declare it with noRollback so processing continues without discarding the transaction.

.faultTolerant()
.noRollback(NonCriticalException.class)

Preventing accidental reruns

A completed JobInstance cannot be re-run with the same parameters - Spring throws JobInstanceAlreadyCompleteException. Add a unique parameter (like a timestamp) when you truly want a fresh run.

Quick Check

Test your error-handling knowledge.

Recap

You made batch jobs resilient:

  • Restartability resumes a failed job from the last good point
  • skip + skipLimit tolerates bad data
  • retry + retryLimit handles transient errors
  • Listeners audit skips/retries; keep writes idempotent

Часто задаваемые вопросы

Урок «Перезапуск и обработка ошибок» бесплатный?

Да — полный текст урока «Перезапуск и обработка ошибок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Spring Boot 4 Microservices & REST APIs, подпишись на CoddyKit PRO. Курс Spring Boot 4 Microservices & REST APIs содержит 4 уроков всего.

Чему я научусь в уроке «Перезапуск и обработка ошибок»?

Восстанавливайтесь после сбоев в пакетных заданиях Ты практикуешь Spring Boot 4 Microservices & REST APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Spring Boot 4 Microservices & REST APIs?

Предыдущий опыт не требуется. Spring Boot 4 Microservices & REST APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Перезапуск и обработка ошибок»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Spring Boot 4 Microservices & REST APIs?

Да. Каждый урок Spring Boot 4 Microservices & REST APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Планирование с помощью @Scheduled
  2. Задания и шаги Spring Batch
  3. Читатели, обработчики и записывающие компоненты
  4. Перезапуск и обработка ошибок
← Назад к Spring Boot 4 Microservices & REST APIs