Dieser Artikel beschreibt direkt, was ich beim Erstellen eines Stapelverarbeitungsprozesses in Eclipse getan habe, indem ich zunächst versucht habe, ein einfaches Framework zu erstellen.
Das Bild der Stapelverarbeitung selbst ist, dass die Verarbeitungszeit als separater Prozess lang ist (Eingabe einer großen Datenmenge, Verarbeitung und Ausgabe). Ich hatte also keine Ahnung von Jobs oder Aufgaben und stellte mir so etwas wie die Ausführung eines langen Prozesses in der Hauptfunktion vor. Als ich jedoch tatsächlich die Funktionen von SpringFramework verwendete, musste ich über Jobs und Aufgaben nachdenken. Führen Sie also zuerst den Job über die Hauptfunktion aus, führen Sie die Aufgabe über den Job aus und machen Sie bis zu dem Punkt, an dem der Endcode festgelegt ist.
Lassen Sie uns zunächst den folgenden Stapelprozess erstellen. ・ BatchTestApplication (Haupt) => Starten Sie BatchTestJob. (Verwenden von Spring Framework) ・ BatchTetJob => Starten Sie BatchTestTasklet. ・ BatchTestTasklet => Ausgabe "BatchTestTasklet Start OK" (setze den Endcode auf 1)
Punkt: Das Festlegen des Endcodes in der Stapelverarbeitung ist etwas kompliziert. (1) Implementieren Sie die ExitCodeGenerator-Schnittstelle in der BatchTestTasklet-Klasse. (2) Überschreiben Sie die Methode getExitCode und geben Sie den darin enthaltenen Rückgabewert zurück. (3) Der Rückgabewert von (2) wird im Rückgabewert von SpringApplication.exit festgelegt.
package com.example.demo;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext;
@SpringBootApplication public class BatchTestAppApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(BatchTestAppApplication.class, args);
int iRet = SpringApplication.exit(context);
System.out.println(iRet);
System.exit(iRet);
}
}
package com.example.demo;
import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component;
@Component @EnableBatchProcessing public class BatchTestJob {
@Autowired
private JobBuilderFactory jobFactory;
@Autowired
private StepBuilderFactory stepFactory;
@Autowired
private BatchTestTasklet batchTestTasklet;
@Bean
public Step step1() {
return stepFactory
.get("step1")
.tasklet(batchTestTasklet)
.build();
}
@Bean
public Job job(Step step1) {
return jobFactory
.get("job")
.incrementer(new RunIdIncrementer())
.start(step1)
.build();
}
}
package com.example.demo;
import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.boot.ExitCodeGenerator; import org.springframework.stereotype.Component;
@Component public class BatchTestTasklet implements Tasklet, ExitCodeGenerator {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("BatchTestTasklet Start OK");
return RepeatStatus.FINISHED;
}
@Override
public int getExitCode() {
return 1;
}
}
Recommended Posts