Dans cet article, lors de la création d'un processus par lots avec Eclipse, j'ai essayé et essayé de créer un cadre simple, puis j'ai procédé tel quel.
L'image du traitement par lots lui-même est que le temps de traitement est long (entrée d'une grande quantité de données, traitement et sortie) comme un autre traitement. Donc, je n'avais pas l'idée de jobs ou de tâches, et j'ai imaginé quelque chose comme exécuter un long processus dans la fonction principale. Cependant, lorsque j'utilisais réellement les fonctions de SpringFramework, je devais penser aux travaux et aux tâches. Donc, tout d'abord, exécutez le travail à partir de la fonction principale, exécutez la tâche à partir du travail et rattrapez le point où le code de fin est défini.
Commençons par créer le processus par lots suivant. ・ BatchTestApplication (principale) => Démarrez BatchTestJob. (Utilisation de Spring Framework) ・ BatchTetJob => Démarrez BatchTestTasklet. ・ BatchTestTasklet => Sortie "BatchTestTasklet Start OK" (définissez le code de fin sur 1)
Point: définir le code de fin dans le traitement par lots est un peu compliqué. (1) Implémentez l'interface ExitCodeGenerator dans la classe BatchTestTasklet. (2) Remplacez la méthode getExitCode et renvoyez-y la valeur de retour. (3) La valeur de retour de (2) est définie dans la valeur de retour de SpringApplication.exit.
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