com.redis.spring.batch.step.FlushingStepBuilder Maven / Gradle / Ivy
The newest version!
package com.redis.spring.batch.step;
import java.time.Duration;
import java.util.ArrayList;
import org.springframework.batch.core.ItemProcessListener;
import org.springframework.batch.core.ItemReadListener;
import org.springframework.batch.core.ItemWriteListener;
import org.springframework.batch.core.StepListener;
import org.springframework.batch.core.step.builder.SimpleStepBuilder;
import org.springframework.batch.core.step.builder.StepBuilderHelper;
import org.springframework.batch.core.step.item.ChunkOrientedTasklet;
import org.springframework.batch.core.step.item.SimpleChunkProcessor;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.repeat.CompletionPolicy;
import org.springframework.batch.repeat.RepeatOperations;
import org.springframework.util.Assert;
import com.redis.spring.batch.reader.PollableItemReader;
public class FlushingStepBuilder extends SimpleStepBuilder {
private Duration interval = FlushingChunkProvider.DEFAULT_FLUSH_INTERVAL;
private Duration idleTimeout = FlushingChunkProvider.DEFAULT_IDLE_TIMEOUT;
public FlushingStepBuilder(StepBuilderHelper> parent) {
super(parent);
}
public FlushingStepBuilder(SimpleStepBuilder parent) {
super(parent);
}
@Override
public FlushingFaultTolerantStepBuilder faultTolerant() {
return new FlushingFaultTolerantStepBuilder<>(this);
}
@Override
protected Tasklet createTasklet() {
ItemReader extends I> reader = getReader();
ItemWriter super O> writer = getWriter();
Assert.state(reader != null, "ItemReader must be provided");
Assert.state(writer != null, "ItemWriter must be provided");
FlushingChunkProvider chunkProvider = createChunkProvider();
SimpleChunkProcessor chunkProcessor = createChunkProcessor();
ChunkOrientedTasklet tasklet = new ChunkOrientedTasklet<>(chunkProvider, chunkProcessor);
tasklet.setBuffering(!isReaderTransactionalQueue());
return tasklet;
}
private SimpleChunkProcessor createChunkProcessor() {
SimpleChunkProcessor chunkProcessor = new SimpleChunkProcessor<>(getProcessor(), getWriter());
chunkProcessor.setListeners(new ArrayList<>(getItemListeners()));
return chunkProcessor;
}
protected FlushingChunkProvider createChunkProvider() {
FlushingChunkProvider chunkProvider = new FlushingChunkProvider<>(getReader(), createChunkOperations());
chunkProvider.setInterval(interval);
chunkProvider.setIdleTimeout(idleTimeout);
ArrayList listeners = new ArrayList<>(getItemListeners());
chunkProvider.setListeners(listeners);
return chunkProvider;
}
@Override
public FlushingStepBuilder chunk(int chunkSize) {
return (FlushingStepBuilder) super.chunk(chunkSize);
}
@Override
public FlushingStepBuilder chunk(CompletionPolicy completionPolicy) {
return (FlushingStepBuilder) super.chunk(completionPolicy);
}
public FlushingStepBuilder idleTimeout(Duration timeout) {
this.idleTimeout = timeout;
return this;
}
public FlushingStepBuilder interval(Duration interval) {
this.interval = interval;
return this;
}
@Override
public FlushingStepBuilder reader(ItemReader extends I> reader) {
Assert.state(reader instanceof PollableItemReader, "Reader must be an instance of PollableItemReader");
return (FlushingStepBuilder) super.reader(reader);
}
@Override
public FlushingStepBuilder writer(ItemWriter super O> writer) {
return (FlushingStepBuilder) super.writer(writer);
}
@Override
public FlushingStepBuilder processor(ItemProcessor super I, ? extends O> processor) {
return (FlushingStepBuilder) super.processor(processor);
}
@Override
public FlushingStepBuilder readerIsTransactionalQueue() {
return (FlushingStepBuilder) super.readerIsTransactionalQueue();
}
@Override
public FlushingStepBuilder listener(Object listener) {
return (FlushingStepBuilder) super.listener(listener);
}
@Override
public FlushingStepBuilder listener(ItemReadListener super I> listener) {
return (FlushingStepBuilder) super.listener(listener);
}
@Override
public FlushingStepBuilder listener(ItemWriteListener super O> listener) {
return (FlushingStepBuilder) super.listener(listener);
}
@Override
public FlushingStepBuilder listener(ItemProcessListener super I, ? super O> listener) {
return (FlushingStepBuilder) super.listener(listener);
}
@Override
public FlushingStepBuilder chunkOperations(RepeatOperations repeatTemplate) {
return (FlushingStepBuilder) super.chunkOperations(repeatTemplate);
}
public Duration getInterval() {
return interval;
}
public Duration getIdleTimeout() {
return idleTimeout;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy