An ItemReader, ItemWriter or ItemProcessor that itself implements one of the StepListener interfaces is registered automatically with the Step if using the namespace
element or one of the the *StepFactoryBean factories. Extrait de https://docs.spring.io/spring-batch/4.1.x/reference/html/step.html#interceptingStepExecution
Si vous implémentez un écouteur tel que `` StepExecutionListener '' dans une classe d'implémentation telle que ItemReader </ code>, cet écouteur sera également automatiquement enregistré (au moins pour exécuter spring-batch avec spring-boot). , Et cela. Je vais l'essayer pour le moment.
Ou plutôt, j'ai été un peu surpris parce que je ne le savais pas, alors j'ai laissé un mot.
pom.xml
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
ItemReader + StepExecutionListener
Créez un processus de bloc approprié.
SampleChunk
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.stereotype.Component;
@Component
public class SampleChunk implements ItemReader<String>, ItemWriter<String>, StepExecutionListener {
@Override
public void write(List<? extends String> items) throws Exception {
items.forEach(s -> System.out.println(s));
}
int i=0;
@Override
public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
if (i<5) {
i++;
return i + "";
}
return null;
}
@Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("beforeStep");
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("afterStep");
return stepExecution.getExitStatus();
}
}
Créez une définition d'étape appropriée.
@Autowired
SampleChunk r2;
@Bean("chunkstep1")
public Step step1() {
StepExecutionListener s = new SampleChunk();
return stepBuilderFactory
.get("step1")
.<String, String>chunk(1)
.reader(r2)
.writer(r2)
.build();//.listener(s)
}
beforeStep
1
2
3
4
5
afterStep
Certes, les auditeurs sont également inscrits.
Essayez d'enregistrer un auditeur avec `` auditeur '' comme indiqué ci-dessous.
@Bean("chunkstep1")
public Step step1() {
StepExecutionListener s = new SampleChunk();
return stepBuilderFactory
.get("step1")
.<String, String>chunk(1)
.reader(r2)
.writer(r2)
.listener(s)
.build();
}
beforeStep
beforeStep
1
2
3
4
5
afterStep
afterStep
C'est le double.