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.