Spring Boot 4 Microservices & REST APIs · บทเรียน

การเริ่มใหม่และการจัดการข้อผิดพลาด

กู้คืนจากความล้มเหลวในงานแบบกลุ่ม

บทเรียน 4 จาก 413 ขั้นตอน

การเริ่มใหม่และการจัดการข้อผิดพลาด เป็นบทเรียน Spring Boot 4 Microservices & REST APIs ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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
เริ่มต้นได้ฟรี

เรียนรู้ Java ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
24
บทเรียน
93

คำถามที่พบบ่อย

บทเรียน “การเริ่มใหม่และการจัดการข้อผิดพลาด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเริ่มใหม่และการจัดการข้อผิดพลาด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Spring Boot 4 Microservices & REST APIs ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเริ่มใหม่และการจัดการข้อผิดพลาด”

กู้คืนจากความล้มเหลวในงานแบบกลุ่ม คุณปฏิบัติ Spring Boot 4 Microservices & REST APIs ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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