Spring Batch adalah kerangka kerja batch yang ringan dan komprehensif yang dirancang untuk memungkinkan pengembangan aplikasi batch yang kuat dan penting untuk operasi sehari-hari sistem perusahaan. Spring Batch dibangun berdasarkan produktivitas, pendekatan pengembangan berbasis POJO, dan kemampuan kemudahan penggunaan umum yang telah diketahui orang-orang dari Spring Framework, sekaligus memudahkan pengembang untuk mengakses dan memanfaatkan layanan perusahaan yang lebih canggih bila diperlukan.
Jika Anda mencari alat orkestrasi runtime untuk aplikasi Batch Anda, atau memerlukan konsol manajemen untuk melihat eksekusi saat ini dan historis, lihat Spring Cloud Data Flow. Ini adalah alat orkestrasi untuk menerapkan dan menjalankan layanan mikro berbasis integrasi data termasuk aplikasi Spring Batch.
Tutorial singkat ini menunjukkan kepada Anda cara menyiapkan proyek minimal untuk menjalankan pekerjaan batch sederhana dengan Spring Batch.
Di IDE favorit Anda, buat proyek Java 17+ berbasis Maven baru dan tambahkan dependensi berikut:
< dependencies >
< dependency >
< groupId >org.springframework.batch</ groupId >
< artifactId >spring-batch-core</ artifactId >
< version >${LATEST_VERSION}</ version >
</ dependency >
< dependency >
< groupId >org.hsqldb</ groupId >
< artifactId >hsqldb</ artifactId >
< version >${LATEST_VERSION}</ version >
< scope >runtime</ scope >
</ dependency >
</ dependencies >
Kemudian, buat kelas konfigurasi untuk menentukan sumber data dan manajer transaksi yang akan digunakan oleh repositori pekerjaan:
import javax . sql . DataSource ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
import org . springframework . jdbc . datasource . embedded . EmbeddedDatabaseBuilder ;
@ Configuration
public class DataSourceConfiguration {
@ Bean
public DataSource dataSource () {
return new EmbeddedDatabaseBuilder ()
. addScript ( "/org/springframework/batch/core/schema-hsqldb.sql" )
. build ();
}
@ Bean
public JdbcTransactionManager transactionManager ( DataSource dataSource ) {
return new JdbcTransactionManager ( dataSource );
}
}
Dalam tutorial ini, database HSQLDB tertanam dibuat dan diinisialisasi dengan tabel meta-data Spring Batch.
Terakhir, buat kelas untuk mendefinisikan tugas batch:
import org . springframework . batch . core . Job ;
import org . springframework . batch . core . JobParameters ;
import org . springframework . batch . core . Step ;
import org . springframework . batch . core . configuration . annotation . EnableBatchProcessing ;
import org . springframework . batch . core . job . builder . JobBuilder ;
import org . springframework . batch . core . launch . JobLauncher ;
import org . springframework . batch . core . repository . JobRepository ;
import org . springframework . batch . core . step . builder . StepBuilder ;
import org . springframework . batch . repeat . RepeatStatus ;
import org . springframework . context . ApplicationContext ;
import org . springframework . context . annotation . AnnotationConfigApplicationContext ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . context . annotation . Import ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
@ Configuration
@ EnableBatchProcessing
@ Import ( DataSourceConfiguration . class )
public class HelloWorldJobConfiguration {
@ Bean
public Step step ( JobRepository jobRepository , JdbcTransactionManager transactionManager ) {
return new StepBuilder ( "step" , jobRepository ). tasklet (( contribution , chunkContext ) -> {
System . out . println ( "Hello world!" );
return RepeatStatus . FINISHED ;
}, transactionManager ). build ();
}
@ Bean
public Job job ( JobRepository jobRepository , Step step ) {
return new JobBuilder ( "job" , jobRepository ). start ( step ). build ();
}
public static void main ( String [] args ) throws Exception {
ApplicationContext context = new AnnotationConfigApplicationContext ( HelloWorldJobConfiguration . class );
JobLauncher jobLauncher = context . getBean ( JobLauncher . class );
Job job = context . getBean ( Job . class );
jobLauncher . run ( job , new JobParameters ());
}
}
Tugas dalam tutorial ini terdiri dari satu langkah yang mencetak "Halo dunia!" ke keluaran standar.
Anda sekarang dapat menjalankan metode main
kelas HelloWorldJobConfiguration
untuk meluncurkan pekerjaan. Outputnya harus serupa dengan yang berikut:
INFO: Finished Spring Batch infrastructure beans configuration in 8 ms.
INFO: Starting embedded database: url='jdbc:hsqldb:mem:testdb', username='sa'
INFO: No database type set, using meta data indicating: HSQL
INFO: No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
INFO: No TaskExecutor has been set, defaulting to synchronous executor.
INFO: Job: [SimpleJob: [name=job]] launched with the following parameters: [{}]
INFO: Executing step: [step]
Hello world!
INFO: Step: [step] executed in 10ms
INFO: Job: [SimpleJob: [name=job]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 25ms
Panduan ini adalah tutorial yang lebih realistis yang menunjukkan pekerjaan batch ETL yang membaca data dari file datar, mengubahnya dan menulisnya ke database relasional. Ini adalah proyek Spring Batch berdasarkan Spring Boot. Anda dapat menemukan Panduan Memulai di sini: Membuat Layanan Batch.
Anda dapat menemukan beberapa sampel untuk dicoba di sini: Sampel Batch Musim Semi.
Jika Anda memiliki pertanyaan atau permintaan dukungan, silakan buka diskusi baru di Diskusi GitHub atau ajukan pertanyaan di StackOverflow.
Harap jangan membuat masalah di Issue Tracker untuk pertanyaan atau permintaan dukungan. Kami ingin menyimpan pelacak masalah secara eksklusif untuk laporan bug dan permintaan fitur.
Spring Batch menggunakan Masalah GitHub untuk mencatat bug dan permintaan fitur. Jika Anda ingin mengangkat masalah, ikuti rekomendasi di bawah ini:
Untuk bug yang tidak sepele, harap buat kasus uji atau proyek yang mereplikasi masalah tersebut dan lampirkan ke masalah tersebut, sebagaimana dirinci dalam Pedoman Pelaporan Masalah.
Silakan lihat kebijakan Keamanan kami.
Kloning repositori git menggunakan URL di beranda Github:
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven adalah alat build yang digunakan untuk Spring Batch. Anda dapat membangun proyek dengan perintah berikut:
$ ./mvnw package
Jika Anda ingin melakukan build lengkap dengan semua pengujian integrasi, jalankan:
$ ./mvnw verify
Harap dicatat bahwa beberapa tes integrasi didasarkan pada Docker, jadi pastikan Docker sudah aktif dan berjalan sebelum menjalankan build penuh.
Untuk menghasilkan dokumentasi referensi, jalankan perintah berikut:
$ cd spring-batch-docs
$ ../mvnw antora:antora
Dokumentasi referensi dapat ditemukan di spring-batch-docs/target/anotra/site
.
Jika Anda ingin membangun proyek dalam container Docker, Anda dapat melanjutkan sebagai berikut:
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
Ini akan memasang kode sumber yang Anda klon sebelumnya pada host di dalam penampung. Jika Anda ingin mengerjakan salinan kode sumber di dalam wadah (tidak ada efek samping pada host), Anda dapat melanjutkan sebagai berikut:
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
Kami menyambut kontribusi dalam bentuk apa pun! Berikut beberapa cara bagi Anda untuk berkontribusi pada proyek ini:
Sebelum kami menerima permintaan penarikan, kami meminta Anda menandatangani perjanjian kontributor. Menandatangani perjanjian kontributor tidak memberikan siapa pun hak komit atas repositori utama, namun itu berarti kami dapat menerima kontribusi Anda, dan Anda akan mendapatkan kredit penulis jika kami menerimanya. Kontributor aktif mungkin diminta untuk bergabung dengan tim inti, dan diberi kemampuan untuk menggabungkan permintaan penarikan.
Silakan lihat kode etik kami.
Spring Batch adalah perangkat lunak Open Source yang dirilis di bawah lisensi Apache 2.0.