[JAVA] spring-batch est automatiquement enregistré lorsqu'un auditeur est implémenté avec un lecteur, etc.

Contexte

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.

Code source

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();
	}
}

définition de l'étape

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)
	}

Courir

beforeStep
1
2
3
4
5
afterStep

Certes, les auditeurs sont également inscrits.

Inscrivez-vous avec l'auditeur

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.

Recommended Posts

spring-batch est automatiquement enregistré lorsqu'un auditeur est implémenté avec un lecteur, etc.
LIMIT 11 lorsque les données sont acquises avec irb