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 مضمنة وتهيئتها باستخدام جداول البيانات الوصفية الخاصة بـ 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. يمكنك العثور على دليل البدء هنا: إنشاء خدمة مجمعة.
يمكنك العثور على العديد من العينات لتجربتها هنا: عينات دفعة الربيع.
إذا كان لديك سؤال أو طلب دعم، يرجى فتح مناقشة جديدة على مناقشات GitHub أو طرح سؤال على StackOverflow.
يرجى عدم إنشاء مشكلات في أداة تعقب المشكلات للأسئلة أو طلبات الدعم. نود أن نحتفظ بأداة تعقب المشكلات حصريًا لتقارير الأخطاء وطلبات الميزات.
يستخدم Spring Batch مشكلات GitHub لتسجيل الأخطاء وطلبات الميزات. إذا كنت تريد إثارة مشكلة ما، يرجى اتباع التوصيات أدناه:
بالنسبة للأخطاء غير التافهة، يرجى إنشاء حالة اختبار أو مشروع يكرر المشكلة وإرفاقها بالمشكلة، كما هو مفصل في إرشادات الإبلاغ عن المشكلات.
يرجى الاطلاع على سياستنا الأمنية.
انسخ مستودع 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.