Spring Batch เป็นเฟรมเวิร์กแบทช์ที่มีน้ำหนักเบาและครอบคลุม ซึ่งออกแบบมาเพื่อช่วยให้สามารถพัฒนาแอปพลิเคชันแบทช์ที่แข็งแกร่งซึ่งมีความสำคัญสำหรับการดำเนินงานประจำวันของระบบองค์กร Spring Batch สร้างขึ้นจากประสิทธิภาพการทำงาน แนวทางการพัฒนาที่อิง POJO และความสามารถทั่วไปในการใช้งานที่ผู้คนรู้จักจาก Spring Framework ขณะเดียวกันก็ทำให้นักพัฒนาสามารถเข้าถึงและใช้ประโยชน์จากบริการระดับองค์กรขั้นสูงได้มากขึ้นเมื่อจำเป็น
หากคุณกำลังมองหาเครื่องมือประสานรันไทม์สำหรับแอปพลิเคชัน Batch ของคุณ หรือต้องการคอนโซลการจัดการเพื่อดูการดำเนินการปัจจุบันและประวัติ โปรดดูที่ Spring Cloud Data Flow เป็นเครื่องมือประสานสำหรับการปรับใช้และดำเนินการไมโครเซอร์วิสที่อิงการบูรณาการข้อมูล รวมถึงแอปพลิเคชัน Spring Batch
บทช่วยสอนฉบับย่อนี้แสดงวิธีตั้งค่าโปรเจ็กต์ขั้นต่ำเพื่อรันงานแบตช์อย่างง่ายด้วย Spring Batch
ใน IDE ที่คุณชื่นชอบ ให้สร้างโปรเจ็กต์ Java 17+ ที่ใช้ Maven ใหม่ และเพิ่มการขึ้นต่อกันต่อไปนี้:
< 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 >
จากนั้น สร้างคลาสการกำหนดค่าเพื่อกำหนดแหล่งข้อมูลและตัวจัดการธุรกรรมที่จะใช้โดยที่เก็บงาน:
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 );
}
}
ในบทช่วยสอนนี้ ฐานข้อมูล HSQLDB แบบฝังจะถูกสร้างขึ้นและเริ่มต้นด้วยตาราง meta-data ของ Spring 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 ());
}
}
งานในบทช่วยสอนนี้ประกอบด้วยขั้นตอนเดียวที่พิมพ์ว่า "Hello world!" ไปยังเอาต์พุตมาตรฐาน
ตอนนี้คุณสามารถรันเมธอด main
ของคลาส HelloWorldJobConfiguration
เพื่อเริ่มงานได้แล้ว ผลลัพธ์ควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้:
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
คู่มือนี้เป็นบทช่วยสอนที่สมจริงยิ่งขึ้นซึ่งแสดงงานแบตช์ ETL ทั่วไปที่อ่านข้อมูลจากไฟล์แฟลต แปลงข้อมูล และเขียนลงในฐานข้อมูลเชิงสัมพันธ์ เป็นโปรเจ็กต์ Spring Batch ที่ใช้ Spring Boot คุณจะพบคู่มือการเริ่มต้นใช้งานที่นี่: การสร้างบริการแบบแบตช์
คุณสามารถหาตัวอย่างต่างๆ เพื่อทดลองใช้ได้ที่นี่: Spring Batch Samples
หากคุณมีคำถามหรือคำร้องขอการสนับสนุน โปรดเปิดการสนทนาใหม่บนการสนทนา GitHub หรือถามคำถามบน StackOverflow
โปรด อย่า สร้างปัญหาในตัวติดตามปัญหาสำหรับคำถามหรือคำร้องขอการสนับสนุน เราต้องการติดตามปัญหา เฉพาะ สำหรับรายงานข้อผิดพลาดและคำขอคุณสมบัติเท่านั้น
Spring Batch ใช้ GitHub Issues เพื่อบันทึกจุดบกพร่องและคำขอคุณสมบัติ หากคุณต้องการแจ้งปัญหา โปรดปฏิบัติตามคำแนะนำด้านล่าง:
สำหรับข้อบกพร่องเล็กๆ น้อยๆ โปรดสร้างกรณีทดสอบหรือโปรเจ็กต์ที่จำลองปัญหาและแนบไปกับปัญหา ตามรายละเอียดในแนวทางการรายงานปัญหา
โปรดดูนโยบายความปลอดภัยของเรา
โคลนที่เก็บ git โดยใช้ URL บนหน้าแรกของ Github:
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven เป็นเครื่องมือสร้างที่ใช้สำหรับ Spring Batch คุณสามารถสร้างโครงการด้วยคำสั่งต่อไปนี้:
$ ./mvnw package
หากคุณต้องการดำเนินการบิลด์เต็มรูปแบบด้วยการทดสอบการรวมทั้งหมด ให้รัน:
$ ./mvnw verify
โปรดทราบว่าการทดสอบการรวมบางส่วนอิงจาก Docker ดังนั้นโปรดตรวจสอบให้แน่ใจว่าได้ติดตั้งและใช้งาน Docker ก่อนที่จะรันเวอร์ชันเต็ม
หากต้องการสร้างเอกสารอ้างอิง ให้รันคำสั่งต่อไปนี้:
$ cd spring-batch-docs
$ ../mvnw antora:antora
เอกสารอ้างอิงสามารถพบได้ใน spring-batch-docs/target/anotra/site
หากคุณต้องการสร้างโปรเจ็กต์ในคอนเทนเนอร์ Docker คุณสามารถดำเนินการดังต่อไปนี้:
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
สิ่งนี้จะเมานต์ซอร์สโค้ดที่คุณโคลนไว้ก่อนหน้านี้บนโฮสต์ภายในคอนเทนเนอร์ หากคุณต้องการทำงานกับสำเนาของซอร์สโค้ดภายในคอนเทนเนอร์ (ไม่มีผลข้างเคียงต่อโฮสต์) คุณสามารถดำเนินการดังต่อไปนี้:
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
เรายินดีรับการสนับสนุนในทุกรูปแบบ! ต่อไปนี้เป็นวิธีบางส่วนสำหรับคุณในการมีส่วนร่วมในโครงการ:
ก่อนที่เรายอมรับคำขอดึง เราจำเป็นต้องให้คุณลงนามในข้อตกลงของผู้ร่วมให้ข้อมูล การลงนามในข้อตกลงของผู้ร่วมให้ข้อมูลไม่ได้ให้สิทธิ์แก่ใครก็ตามในการยืนยันสิทธิ์ในพื้นที่เก็บข้อมูลหลัก แต่หมายความว่าเราสามารถยอมรับการมีส่วนร่วมของคุณได้ และคุณจะได้รับเครดิตผู้เขียนหากเรายอมรับ ผู้มีส่วนร่วมที่ใช้งานอยู่อาจถูกขอให้เข้าร่วมทีมหลัก และกำหนดให้สามารถรวมคำขอดึงข้อมูลได้
โปรดดูจรรยาบรรณของเรา
Spring Batch เป็นซอฟต์แวร์โอเพ่นซอร์สที่เผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0