Panduan Lengkap Spring Boot 4 · Pelajaran

Kerja, Langkah dan Model JobRepository

Susun beban kerja kelompok dengan kerja, langkah dan ketekalan metadata untuk menjejak pelaksanaan.

Pelajaran 1 daripada 413 langkah

Kerja, Langkah dan Model JobRepository ialah pelajaran Panduan Lengkap Spring Boot 4 percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Panduan Lengkap Spring Boot 4, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Panduan Lengkap Spring Boot 4 merangkumi sejumlah 4 pelajaran.

Sebab Spring Batch Wujud

Banyak beban kerja dunia sebenar bukan berbentuk permintaan/tindak balas: penjanaan invois waktu malam, import CSV, eksport laporan dan pemindahan data. Semua ini dijalankan sebagai tugas kelompok yang memproses jumlah rekod yang besar.

  • Tugas tersebut mestilah boleh dimulakan semula selepas ranap.
  • Tugas tersebut mestilah menjejaki kemajuan supaya anda tahu perkara yang telah dijalankan.
  • Tugas tersebut mestilah mengendalikan jutaan baris tanpa memuatkan semuanya ke dalam memori.

Spring Batch memberikan model berstruktur yang tepat untuk tujuan ini. Tiga abstraksi teras yang perlu anda fahami terlebih dahulu ialah Job, Step dan JobRepository.

Job: Unit Kerja

Job ialah bekas peringkat teratas untuk keseluruhan proses kelompok. Ia mempunyai nama dan terdiri daripada satu atau lebih tika Step yang tersusun.

  • Satu takrifan Job boleh dilaksanakan berkali-kali — setiap pelaksanaan ialah JobInstance.
  • Setiap percubaan menjalankan JobInstance ialah JobExecution (status, masa mula dan kod keluar).

Dalam Spring Boot 4, anda membina Job dengan JobBuilder, sambil membekalkan nama dan JobRepository.

@Bean
public Job importInvoicesJob(JobRepository jobRepository, Step readStep) {
    return new JobBuilder("importInvoicesJob", jobRepository)
            .start(readStep)
            .build();
}

JobInstance berbanding JobExecution

Perbezaan ini ialah inti kebolehmulaan semula. Katakan anda menjalankan importInvoicesJob untuk tarikh 2026-06-10.

  • JobInstance dikenal pasti melalui nama tugas serta parameter tugas yang mengenal pasti (dalam contoh ini, tarikh). Menjalankannya semula dengan tarikh yang sama merujuk kepada tika yang sama.
  • Setiap pelaksanaan menghasilkan JobExecution baharu. Jika percubaan pertama gagal dan anda memulakannya semula, anda mendapat JobExecution kedua untuk JobInstance yang sama.

JobInstance yang telah selesai tidak boleh dijalankan semula dengan parameter pengenalan yang sama — Spring Batch melontarkan JobInstanceAlreadyCompleteException. Ini mencegah pemprosesan berganda secara tidak sengaja.

Step: Fasa Job

Step ialah fasa bebas dan berjujukan dalam Job. Job biasanya merangkaikan beberapa step: sahkan input, kemudian proses rekod, dan akhirnya hantar e-mel ringkasan.

Terdapat dua jenis step:

  • Berorientasikan ketulan: baca–proses–tulis dalam ketulan yang boleh dikonfigurasikan. Sesuai untuk set data yang besar.
  • Tasklet: satu tindakan sewenang-wenangnya (padam fail, jalankan prosedur tersimpan, ping perkhidmatan).

Setiap pelaksanaan Step dijejaki oleh StepExecution, yang merekodkan bilangan bacaan/tulisan, bilangan komit dan status.

Step Berorientasikan Ketulan

Step berorientasikan ketulan menghubungkan ItemReader, ItemProcessor pilihan dan ItemWriter. Panggilan chunk(n, transactionManager) menetapkan selang komit: selepas setiap n item dibaca dan diproses, penulis mengosongkan penimbal dan transaksi dilakukan komit.

Ketulan yang lebih kecil bermaksud komit lebih kerap (titik mula semula lebih selamat, tetapi lebih banyak overhed); ketulan yang lebih besar bermaksud komit lebih sedikit (lebih pantas, tetapi lebih banyak kerja hilang apabila transaksi digulung semula).

@Bean
public Step readStep(JobRepository jobRepository,
                     PlatformTransactionManager txManager,
                     ItemReader<Invoice> reader,
                     ItemProcessor<Invoice, Invoice> processor,
                     ItemWriter<Invoice> writer) {
    return new StepBuilder("readStep", jobRepository)
            .<Invoice, Invoice>chunk(100, txManager)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
}

Step Tasklet

Apabila sesuatu fasa ialah satu tindakan dan bukannya aliran item, gunakan Tasklet. Kaedah execute memulangkan RepeatStatus.FINISHED apabila selesai, atau CONTINUABLE untuk dipanggil semula.

Tasklet amat sesuai untuk step persediaan/pembersihan seperti mengarkibkan fail yang telah diproses atau memendekkan jadual pementasan.

@Bean
public Step cleanupStep(JobRepository jobRepository,
                        PlatformTransactionManager txManager) {
    return new StepBuilder("cleanupStep", jobRepository)
            .tasklet((contribution, chunkContext) -> {
                Path staging = Path.of("/data/staging.csv");
                Files.deleteIfExists(staging);
                return RepeatStatus.FINISHED;
            }, txManager)
            .build();
}

Menggabungkan Step ke dalam Job

Step berjalan mengikut susunan yang anda isytiharkan. Gunakan start(...) untuk step pertama dan next(...) untuk merangkaikan selebihnya. Secara lalai, Job berhenti jika Step berakhir dengan status FAILED.

Di sini tugas mengesahkan, mengimport dan kemudian membersihkan. Jika step import gagal, cleanupStep tidak dijalankan, dan apabila dimulakan semula, tugas menyambung dari step yang gagal.

@Bean
public Job invoiceJob(JobRepository jobRepository,
                      Step validateStep, Step readStep, Step cleanupStep) {
    return new JobBuilder("invoiceJob", jobRepository)
            .start(validateStep)
            .next(readStep)
            .next(cleanupStep)
            .build();
}

JobRepository: Memori Kekal

JobRepository ialah komponen yang mengekalkan semua metadata kelompok: JobInstance yang wujud, JobExecution masing-masing, setiap StepExecution dan konteks pelaksanaan.

  • Inilah cara Spring Batch mengetahui bahawa sesuatu tugas telah selesai.
  • Inilah cara proses mula semula menentukan tempat untuk menyambung.
  • Ia menyimpan bilangan bacaan/tulisan/komit untuk pemantauan.

Secara lalai, ia menulis ke pangkalan data hubungan menggunakan set jadual BATCH_*. Tanpa JobRepository yang berfungsi, tiada kebolehmulaan semula dan tiada sejarah pelaksanaan — ia bukan pilihan.

Jadual Metadata BATCH_

JobRepository mengekalkan data dalam skema tetap. Jadual utama ialah:

  • BATCH_JOB_INSTANCE — satu baris bagi setiap JobInstance (nama + cincangan identiti).
  • BATCH_JOB_EXECUTION — satu baris bagi setiap percubaan pelaksanaan, dengan status dan kod keluar.
  • BATCH_STEP_EXECUTION — pembilang bagi setiap step (bilangan bacaan/tulisan/langkauan).
  • BATCH_JOB_EXECUTION_CONTEXT / BATCH_STEP_EXECUTION_CONTEXT — keadaan bersiri yang digunakan untuk menyambung pelaksanaan.
  • BATCH_*_SEQ — jujukan untuk kunci primer.

Spring Boot menyediakan DDL dan boleh mencipta jadual ini secara automatik. Sifat di bawah memulakan skema semasa permulaan.

# application.properties
spring.batch.jdbc.initialize-schema=always
# Prevent jobs from auto-running on app startup
spring.batch.job.enabled=false

Melancarkan Job

Anda melaksanakan Job melalui JobLauncher dengan menghantar JobParameters. Parameter pengenalan menentukan JobInstance; di sini tarikh pelaksanaan menjadikan setiap hari satu tika yang berbeza.

Pelancar memulangkan JobExecution yang statusnya (COMPLETED, FAILED, STOPPED) mencerminkan pelaksanaan tersebut. Semua ini direkodkan dalam JobRepository.

@Component
public class InvoiceJobRunner {
    private final JobLauncher jobLauncher;
    private final Job invoiceJob;

    public InvoiceJobRunner(JobLauncher jobLauncher, Job invoiceJob) {
        this.jobLauncher = jobLauncher;
        this.invoiceJob = invoiceJob;
    }

    public void run(LocalDate date) throws Exception {
        JobParameters params = new JobParametersBuilder()
                .addLocalDate("runDate", date)
                .toJobParameters();
        JobExecution execution = jobLauncher.run(invoiceJob, params);
        System.out.println("Status: " + execution.getStatus());
    }
}

Cara Mula Semula Menggunakan Repository

Gabungkan semua bahagian. Apabila Job gagal di pertengahan pelaksanaan:

  • JobExecution yang gagal ditandakan sebagai FAILED, tetapi JobInstance tersebut tidak ditandakan sebagai selesai.
  • Setiap Step yang selesai direkodkan; step berorientasikan kelompok turut menyimpan bilangan item yang diprosesnya dalam ExecutionContext.
  • Melancarkan semula dengan parameter pengenalpastian yang sama akan menghasilkan JobExecution baharu pada instance yang sama. Spring Batch melangkau step yang telah selesai dan menyambung semula step yang gagal dari kelompok terakhir yang telah dilakukan commit.

Inilah sebabnya parameter pengenalpastian dan JobRepository mesti kekal stabil: kedua-duanya ialah koordinat untuk penyambungan semula.

Semakan Ringkas

Uji pemahaman anda tentang model job/instance/execution.

Rumusan

Sekarang anda telah memahami model struktur Spring Batch:

  • Job — proses peringkat teratas, dibina dengan JobBuilder dan terdiri daripada Step yang tersusun.
  • JobInstance berbanding JobExecution — sesuatu instance dikenal pasti melalui nama + parameter pengenalpastian; setiap percubaan pelaksanaan ialah execution yang berasingan.
  • Step — satu fasa, sama ada berorientasikan kelompok (baca/proses/tulis dengan selang commit) atau tasklet (satu tindakan); dijejaki oleh StepExecution.
  • JobRepository — metadata berterusan dalam jadual BATCH_* yang menyokong kebolehan dimulakan semula, logik penyambungan semula dan pemantauan.

Apabila anda menguasai perkara ini, seluruh Spring Batch yang lain — pembaca, penulis, pendengar dan pembahagian — dapat ditambah dengan kemas di atasnya.

Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
21
Pelajaran
84

Soalan Lazim

Adakah pelajaran “Kerja, Langkah dan Model JobRepository” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Panduan Lengkap Spring Boot 4, termasuk “Kerja, Langkah dan Model JobRepository”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Panduan Lengkap Spring Boot 4 merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kerja, Langkah dan Model JobRepository”?

Susun beban kerja kelompok dengan kerja, langkah dan ketekalan metadata untuk menjejak pelaksanaan. Anda berlatih Panduan Lengkap Spring Boot 4 menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Panduan Lengkap Spring Boot 4?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Panduan Lengkap Spring Boot 4 di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Kerja, Langkah dan Model JobRepository” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Panduan Lengkap Spring Boot 4 ini?

Ya. Setiap pelajaran Panduan Lengkap Spring Boot 4 menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kerja, Langkah dan Model JobRepository
  2. Aliran Pembaca-Pemproses-Penulis Berorientasikan Ketulan
  3. Toleransi Kerosakan, Langkau dan Dasar Percubaan Semula
  4. Pembahagian dan Pelaksanaan Langkah Selari
← Kembali ke Panduan Lengkap Spring Boot 4