[JAVA] Spring-Batch wird automatisch registriert, wenn ein Listener mit Reader usw. implementiert wird.

Hintergrund

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.

Auszug aus https://docs.spring.io/spring-batch/4.1.x/reference/html/step.html#interceptingStepExecution

Wenn Sie einen Listener wie `` `StepExecutionListener``` in einer Implementierungsklasse wie ItemReader </ code> implementieren, wird dieser Listener ebenfalls automatisch registriert (zumindest für die Ausführung von Spring-Batch zusammen mit Spring-Boot). , Und das. Ich werde es vorerst versuchen.

Oder besser gesagt, ich war ein wenig überrascht, weil ich es nicht wusste, also habe ich eine Notiz hinterlassen.

Quellcode

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

Erstellen Sie einen geeigneten Chunk-Prozess.

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

Schrittdefinition

Erstellen Sie eine entsprechende Schrittdefinition.

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

Lauf

beforeStep
1
2
3
4
5
afterStep

Natürlich sind auch Zuhörer registriert.

Registrieren Sie sich beim Hörer

Versuchen Sie, einen Listener wie unten gezeigt bei `` `listener``` zu registrieren.

	@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

Das ist doppelt.

Recommended Posts

Spring-Batch wird automatisch registriert, wenn ein Listener mit Reader usw. implementiert wird.
LIMIT 11, wenn Daten mit irb erfasst werden