Spring Batch ist ein leichtes, umfassendes Batch-Framework, das die Entwicklung robuster Batch-Anwendungen ermöglicht, die für den täglichen Betrieb von Unternehmenssystemen unerlässlich sind. Spring Batch baut auf der Produktivität, dem POJO-basierten Entwicklungsansatz und den allgemeinen Benutzerfreundlichkeitsfunktionen auf, die Menschen vom Spring Framework kennen, und erleichtert Entwicklern gleichzeitig den Zugriff und die Nutzung erweiterter Unternehmensdienste bei Bedarf.
Wenn Sie nach einem Runtime-Orchestrierungstool für Ihre Batch-Anwendungen suchen oder eine Verwaltungskonsole benötigen, um aktuelle und historische Ausführungen anzuzeigen, werfen Sie einen Blick auf Spring Cloud Data Flow. Es handelt sich um ein Orchestrierungstool für die Bereitstellung und Ausführung datenintegrationsbasierter Microservices, einschließlich Spring Batch-Anwendungen.
Dieses kurze Tutorial zeigt Ihnen, wie Sie ein Minimalprojekt einrichten, um einen einfachen Batch-Job mit Spring Batch auszuführen.
Erstellen Sie in Ihrer bevorzugten IDE ein neues Maven-basiertes Java 17+-Projekt und fügen Sie die folgenden Abhängigkeiten hinzu:
< 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 >
Erstellen Sie dann eine Konfigurationsklasse, um die Datenquelle und den Transaktionsmanager zu definieren, die vom Job-Repository verwendet werden:
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 );
}
}
In diesem Tutorial wird eine eingebettete HSQLDB-Datenbank erstellt und mit den Metadatentabellen von Spring Batch initialisiert.
Erstellen Sie abschließend eine Klasse, um den Batch-Job zu definieren:
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 ());
}
}
Der Job in diesem Tutorial besteht aus einem einzigen Schritt, der „Hallo Welt!“ ausgibt. zur Standardausgabe.
Sie können jetzt die main
der HelloWorldJobConfiguration
-Klasse ausführen, um den Job zu starten. Die Ausgabe sollte etwa wie folgt aussehen:
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
Bei dieser Anleitung handelt es sich um ein realistischeres Tutorial, das einen typischen ETL-Batch-Job zeigt, der Daten aus einer Flatfile liest, sie umwandelt und in eine relationale Datenbank schreibt. Es handelt sich um ein Spring Batch-Projekt, das auf Spring Boot basiert. Den Leitfaden „Erste Schritte“ finden Sie hier: Erstellen eines Batch-Dienstes.
Hier finden Sie mehrere Beispiele zum Ausprobieren: Spring Batch Samples.
Wenn Sie eine Frage oder eine Supportanfrage haben, eröffnen Sie bitte eine neue Diskussion auf GitHub Discussions oder stellen Sie eine Frage auf StackOverflow.
Bitte erstellen Sie im Issue Tracker keine Probleme für Fragen oder Supportanfragen. Wir möchten den Issue-Tracker ausschließlich für Fehlerberichte und Funktionsanfragen behalten.
Spring Batch verwendet GitHub Issues, um Fehler und Funktionsanfragen aufzuzeichnen. Wenn Sie ein Problem ansprechen möchten, befolgen Sie bitte die folgenden Empfehlungen:
Bei nicht trivialen Fehlern erstellen Sie bitte einen Testfall oder ein Projekt, das das Problem reproduziert, und hängen Sie es an das Problem an, wie in den Richtlinien zur Problemberichterstattung beschrieben.
Bitte beachten Sie unsere Sicherheitsrichtlinie.
Klonen Sie das Git-Repository mithilfe der URL auf der Github-Homepage:
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven ist das Build-Tool für Spring Batch. Sie können das Projekt mit dem folgenden Befehl erstellen:
$ ./mvnw package
Wenn Sie einen vollständigen Build mit allen Integrationstests durchführen möchten, führen Sie Folgendes aus:
$ ./mvnw verify
Bitte beachten Sie, dass einige Integrationstests auf Docker basieren. Stellen Sie daher sicher, dass Docker ausgeführt wird, bevor Sie einen vollständigen Build ausführen.
Führen Sie die folgenden Befehle aus, um die Referenzdokumentation zu generieren:
$ cd spring-batch-docs
$ ../mvnw antora:antora
Die Referenzdokumentation finden Sie unter spring-batch-docs/target/anotra/site
.
Wenn Sie das Projekt in einem Docker-Container erstellen möchten, können Sie wie folgt vorgehen:
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
Dadurch wird der Quellcode, den Sie zuvor auf dem Host geklont haben, im Container bereitgestellt. Wenn Sie an einer Kopie des Quellcodes innerhalb des Containers arbeiten möchten (keine Nebenwirkungen auf dem Host), können Sie wie folgt vorgehen:
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
Wir freuen uns über Beiträge jeglicher Art! Hier sind einige Möglichkeiten für Sie, zum Projekt beizutragen:
Bevor wir Pull-Anfragen akzeptieren, müssen Sie die Mitwirkendenvereinbarung unterzeichnen. Die Unterzeichnung der Mitwirkendenvereinbarung gewährt niemandem Rechte am Hauptrepository, bedeutet aber, dass wir Ihre Beiträge annehmen können und Sie in diesem Fall eine Urheberangabe erhalten. Aktive Mitwirkende werden möglicherweise gebeten, dem Kernteam beizutreten, und erhalten die Möglichkeit, Pull-Anfragen zusammenzuführen.
Bitte beachten Sie unseren Verhaltenskodex.
Spring Batch ist eine Open-Source-Software, die unter der Apache 2.0-Lizenz veröffentlicht wird.