【发布时间】:2019-04-04 16:30:55
【问题描述】:
我有一个现有的包含多个步骤的春季批处理项目。我想修改一个步骤,以便停止工作:jobExecution.getStatus() == STOPPED。
我的步骤:
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
private StepReader reader;
@Autowired
private StepProcessor processor;
@Autowired
private StepWriter writer;
@Autowired
public GenericListener listener;
@Bean
@JobScope
@Qualifier("mystep")
public Step MyStep() throws ReaderException {
return stepBuilderFactory.get("mystep")
.reader(reader.read())
.listener(listener)
.processor(processor)
.writer(writer)
.build();
}
GenericListener 实现了ItemReadListener, ItemProcessListener, ItemWriteListener 并覆盖了之前和之后基本上写日志的方法。
这里的重点是StepReader 类及其返回FlatFileItemReader 的read() 方法:
@Component
public class StepReader {
public static final String DELIMITER = "|";
@Autowired
private ClassToAccessProperties classToAccessProperties;
private Logger log = Logger.create(StepReader.class);
@Autowired
private FlatFileItemReaderFactory<MyObject> flatFileItemReaderFactory;
public ItemReader<MyObject> read() throws ReaderException {
try {
String csv = classToAccessProperties.getInputCsv();
FlatFileItemReader<MyObject> reader = flatFileItemReaderFactory.create(csv, getLineMapper());
return reader;
} catch (ReaderException | EmptyInputfileException | IOException e) {
throw new ReaderException(e);
} catch (NoInputFileException e) {
log.info("Oh no !! No input file");
// Here I want to stop the job
return null;
}
}
private LineMapper<MyObject> getLineMapper () {
DefaultLineMapper<MyObject> mapper = new DefaultLineMapper<>();
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer();
delimitedLineTokenizer.setDelimiter(DELIMITER);
mapper.setLineTokenizer(delimitedLineTokenizer);
mapper.setFieldSetMapper(new MyObjectFieldSetMapper());
return mapper;
}
}
我试图在StepReader 中实现StepExecutionListener 但没有运气,我认为是因为StepBuilderFactory 中的reader 方法期望ItemReader 来自reader.read() 方法,它并不关心其余的班级。
我正在寻找能够在NoInputFileException 被捕获时停止整个工作(而不是失败)的想法或解决方案。
【问题讨论】:
-
这里stackoverflow.com/questions/34005152/…。 Luca Basso Ricci 的评论应该适合你。
标签: java spring spring-batch