我在Spring Batch中有一个结构。 1. xmlItemReader读取xml,它有一个日期。日期一2.然后,有一个处理器应根据条件if (one <current)
创建一个小于今天的日期列表。 3.然后将此列表写入txt文件。
1实现为
@Bean
public ItemReader<Bic> reader() {
FlatFileItemReader<Bic> reader = new FlatFileItemReader<Bic>();
reader.setResource(new ClassPathResource("sample-data.xml"));
reader.setLineMapper(new DefaultLineMapper<Bic>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[]{"date"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Bic>() {{
setTargetType(Bic.class);
}});
}});
return reader;
}
3实现为
@Bean
public FlatFileItemWriter itemWriter() {
return new FlatFileItemWriterBuilder<Foo>()
.name("itemWriter")
.resource(new FileSystemResource("target/test/output.txt"))
.lineAggregator(new PassThroughLineAggregator<>())
.build();
}
如何根据步骤2中的条件实现处理器?
答案 0 :(得分:1)
在不知道类结构的情况下,可能是以下情况:
创建新类,例如 MyProcessor.java 伪代码如下
public class MyProcessor implements ItemProcessor<InputData, OutputData>{
@Override
public OutputData process(InputData item) throws Exception {
if(item.checkingDate.isBefore(LocalDAteTime.now()){
log.info("Skipping {}", item);
return null;
}
//do your stuff
return new OutputData();
}
将处理器添加到作业配置中,例如:
@Bean
Step step1() {
return stepBuilderFactory.get("step1")
.listener(dataProcessor)
.<InputData, OutputData>chunk(100)
.faultTolerant()
.reader(reader())
.processor(new MyProcessor())
.writer(itemWriter())
.build();
}